はじめに
前回の記事では、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. まとめ
ジャンプの実装で、キャラクターの動きに立体感が出てきました。
次回は、敵キャラや障害物の追加に挑戦してみましょう!