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