2Dゲーム制作

【初心者向け】Unityで2Dキャラにジャンプを実装しよう|物理挙動と入力処理を解説

はじめに

前回の記事では、Unityで2Dキャラクターを左右に動かす基本を学びました。今回はその続きとして、「ジャンプ機能」を実装してみましょう。
Rigidbody2Dの物理演算を使って、よりリアルなキャラクター挙動を作ることができます。


1. 前回のおさらい

  • キャラクターに「Rigidbody2D」と「Box Collider 2D」を追加して、物理挙動と当たり判定を設定済み
  • 左右移動はスクリプトのUpdate関数で制御

2. 地面の準備とレイヤー設定

地面のオブジェクト作成

  • 四角形のスプライト(例:ブロック画像)を使って「Ground」オブジェクトを配置
  • Box Collider 2D を付けて当たり判定を設定

レイヤーの設定

  • Groundに「Ground」レイヤーを割り当てておく(ジャンプ判定に使います)
    ※レイヤーはレイヤー → レイヤーを追加をクリックし、リストに「Ground」を追加することでレイヤーを増やせます

3. ジャンプ用スクリプトの追加・修正

「PlayerController.cs」を以下のように書き換えます:

using UnityEngine;

public class PlayerController : MonoBehaviour
{
    public float moveSpeed = 5f;
    public float jumpForce = 5f;
    private Rigidbody2D rb;
    private bool isGrounded = false;

    void Start()
    {
        rb = GetComponent();
    }

    void Update()
    {
        float moveX = Input.GetAxis("Horizontal");
        rb.velocity = new Vector2(moveX * moveSpeed, rb.velocity.y);

        if (Input.GetKeyDown(KeyCode.Space) && isGrounded)
        {
            rb.AddForce(Vector2.up * jumpForce, ForceMode2D.Impulse);
        }
    }

    void OnCollisionEnter2D(Collision2D collision)
    {
        if (collision.gameObject.layer == LayerMask.NameToLayer("Ground"))
        {
            isGrounded = true;
        }
    }

    void OnCollisionExit2D(Collision2D collision)
    {
        if (collision.gameObject.layer == LayerMask.NameToLayer("Ground"))
        {
            isGrounded = false;
        }
    }
}

4. 実行して確認しよう

  • スペースキーでジャンプできるか確認
  • 空中での連続ジャンプを防げているかもチェック

5. まとめ

ジャンプの実装で、キャラクターの動きに立体感が出てきました。
次回は、敵キャラや障害物の追加に挑戦してみましょう!