速度をチェックしてジャンプを制御する【Unityゲーム制作】

Unityの2Dゲームで「速度を判定してジャンプ制御」を実装していきます。

オブジェクトの速度を確認することで、「停止中・上昇中・下落中などでジャンプが出来る」の制御します。

はじめに

Unityのバージョンは2021.3.14f1です。

2Dゲームで「すごく簡単にプレイヤーのジャンプ制御」を実装していきます。2段ジャンプができるタイミングを制御する感じですね。

下記のRaycastを飛ばすよりも簡単に実装できます。

実装開始

「UI作成」→「判定追加(スクリプト)」の順番で行います。

プレイヤーと地面を作成

まずは簡単に画面を作成します。「2D Object」→「Sprites」→「Square」を2つ追加。

一つは「Player」に名前を変更、「BoxCollider 2D」と「Rigidbody 2D」をアタッチします。

もう一つはGroundに名前を変更してスケールとSpriteRendererの色を変更、「BoxCollider 2D」をアタッチします。

下記の様な感じにします。白い四角がプレイヤー、黒い下部分が床ですね。

この状態で実行すると、白いプレイヤーにrigidbodyをアタッチしてあるので落下します。

プレイヤーのジャンプスクリプト

PlayerJumpと言う名前で下記スクリプトを作成します。

using UnityEngine;

public class PlayerJump : MonoBehaviour
{
    private float jumpPower = 5.0f;
    private Rigidbody2D _rigidbody;

    void Start()
    {
        _rigidbody = GetComponent<Rigidbody2D>();
    }
    void Update()
    {
        if (Input.GetKey(KeyCode.Space))
            _rigidbody.velocity = new Vector2(0, jumpPower);
    }
}

スペースキーを押した時、ジャンプするという簡単なものです。

このスクリプトをPlayerにアタッチして実行してみます。

スペースキーを押すとジャンプします。何度も押すとドンドン上に行きます。

速度によって制御する

スクリプトのUpdate内を下記のように変更してみます。

    void Update()
    {
        if (Input.GetKey(KeyCode.Space) && _rigidbody.velocity.y == 0)
            _rigidbody.velocity = new Vector2(_rigidbody.velocity.x, jumpPower);
    }

「_rigidbody.velocity.y == 0(速度のY軸が0)」はプレイヤーが上昇中でも下落中でない状態ですね。

スペースキーを押し続けても、下記のように地面に着地するまでは有効にならず2段ジャンプをしなくなります。

上昇中はNG、下降中はOKなら条件を下記の様な感じに。

        if (Input.GetKey(KeyCode.Space) && _rigidbody.velocity.y <= 0) 

絶対値(Mathf.Abs)を利用して、設定値以下の場合はOKとかも簡単に出来ますね。とはいえ、簡易的な感じですかね。

タイトルとURLをコピーしました