ゲームプログラミング独学ブログ

ゲームプログラミングを初心者・未経験から独学で身に着けるための情報をまとめていきます。Unityを使った2D・3Dゲームの開発方法やゲームクリエイターになるための情報もまとめていきます。

Unityでマリオ風ジャンプを実現!初心者でも気持ちいいアクションを作る方法

【必見】ゲームプログラミング初心者向けのUnityを使ったゲームプログラミング講座サイト「Unity入門の森」の講座ショップ。RPG、アクションゲーム、ノベルゲーム、タワーディフェンス、FPS、レースゲーム、ローグライクゲームと盛りだくさんの講座サイトです。ここで独学でゲーム開発できるようになりました。

Unityを使った2Dアクションゲームにおいて、ジャンプアクションは欠かせない要素です。本記事では、ジャンプの基本実装から、長押しでジャンプの高さを変える仕組み、アニメーションの設定方法までを詳しく解説します。初心者でも分かりやすいコード例を交えながら進めていきますので、一緒に挑戦してみましょう!

ジャンプアクションの基本とは

ジャンプアクションは、ゲームの操作感やプレイ体験に大きな影響を与えます。たとえば、マリオのような軽快で気持ちいいジャンプは、単にプレイヤーを上に動かすだけでなく、高さや滞空時間、操作性など複数の要素が絡み合っています。

  • ジャンプの基本要素
    • ジャンプの高さ
    • 重力の適用
    • 着地判定

これらを正確に実装することで、プレイヤーに満足感を与えるアクションが完成します。


Unityでジャンプアクションを実装する手順

まずは基本的なジャンプ機能を実装しましょう。

スクリプト:基本的なジャンプ

以下のコードをキャラクターにアタッチします。

 using UnityEngine; public class PlayerJump : MonoBehaviour {

public float jumpForce = 5f; private Rigidbody2D rb;

private bool isGrounded; void Start() { rb = GetComponent();

}

void Update() {

if (Input.GetKeyDown(KeyCode.Space) && isGrounded) {

rb.velocity = new Vector2(rb.velocity.x, jumpForce); isGrounded = false;

} }

private void OnCollisionEnter2D(Collision2D collision) {

if (collision.gameObject.CompareTag("Ground")) { isGrounded = true;

}

}

  1. Rigidbody2Dを使って物理演算を処理。
  2. isGroundedで地面との接触を判定。
  3. スペースキーでジャンプ動作を実行。

気持ちいいジャンプを作るためのポイント

ジャンプの基本ができたら、さらに工夫してゲーム性を高めましょう。

長押しで高さを変える

長押しでジャンプの高さを調整する方法を紹介します。

 

 using UnityEngine;    
 public class VariableJump : MonoBehaviour { public float jumpForce = 5f;    
 public float maxHoldTime = 0.5f;    
 private Rigidbody2D rb;    
 private bool isJumping;    
 private float jumpTimer;    
 void Start() { rb = GetComponent();    
  }    
 void Update() { if (Input.GetKeyDown(KeyCode.Space)) { isJumping = true;    
 jumpTimer = 0;    
 rb.velocity = new Vector2(rb.velocity.x, jumpForce);    
  }    
 if (Input.GetKey(KeyCode.Space) && isJumping) { jumpTimer += Time.deltaTime;    
 if (jumpTimer < maxHoldTime) { rb.velocity = new Vector2(rb.velocity.x, jumpForce);    
  }    
  }    
 if (Input.GetKeyUp(KeyCode.Space)) { isJumping = false;    
  }    
  }    
  }    
 

ジャンプ中に横移動を可能にすると、より滑らかな動きが実現します。


ジャンプアニメーションの実装と設定

次に、ジャンプアニメーションを設定します。

  1. アニメーションの準備

    • Animatorで「Idle」「Jump」「Fall」の状態を作成。
    • トリガー「isJumping」「isFalling」を設定。
  2. スクリプトでアニメーションを切り替え

 using UnityEngine;    
 public class VariableJump : MonoBehaviour {    
 public float jumpForce = 5f;    
 public float maxHoldTime = 0.5f;    
 private Rigidbody2D rb;    
 private bool isJumping;    
 private float jumpTimer;    
 void Start() {    
 rb = GetComponent();    
  }    
 void Update() {    
 if (Input.GetKeyDown(KeyCode.Space)) {    
 isJumping = true;    
 jumpTimer = 0;    
 rb.velocity = new Vector2(rb.velocity.x, jumpForce);    
  }    
 if (Input.GetKey(KeyCode.Space) && isJumping) {    
 jumpTimer += Time.deltaTime;    
 if (jumpTimer < maxHoldTime) {    
 rb.velocity = new Vector2(rb.velocity.x, jumpForce);    
  }    
  }    
 if (Input.GetKeyUp(KeyCode.Space)) {    
 isJumping = false;    
  }    
  }    
 }    

ジャンプが動作しない

  • 解決策: Rigidbody2Dの設定やGroundタグを再確認。

空中で何度もジャンプしてしまう

  • 解決策: isGroundedフラグを正確に管理。

Unity入門の森で学ぶ次のステップ

Unity入門の森の「Unity 2Dアクションの作り方」では、さらに応用的なスキルを学べます。ジャンプアクション以外の実装も詳しく解説されており、あなたのスキルアップに最適です。


まとめ

  • マリオ風ジャンプの基本と応用を学びました。
  • 長押しやアニメーションの工夫で、操作性の良いジャンプが実現できます。
  • 次は、応用スキルを学んで独自のゲームを作りましょう!