Unityの2Dゲームで「速度を判定してジャンプ制御」を実装していきます。
以前、Raycastを利用して地面の接地判定を行い2段ジャンプできないように制御しましたが、こんなやり方もあるという感じです。
はじめに
「Unity 2020.3.26f1」ヴァージョンで作成しています。
2Dゲームで「すごく簡単にプレイヤーのジャンプ制御」を実装していきます。2段ジャンプできないようにするという感じですね。
下記のRaycastを飛ばすよりも簡単に実装できます。
実装開始
実装は「フィールド、プレイヤー作成」→「判定追加(スクリプト)」の順番で行います。
フィールドとプレイヤーを作成
まずは簡単に画面を作成。
「2Dオブジェクト」→「スプライト」→「正方形」を2つ追加。
一つはPlayerに名前を変更して、「BoxCollider 2D」と「Rigidbody 2D」をアタッチ。

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

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

プレイヤーのジャンプスクリプト
PlayerJump2と言う名前で下記スクリプトを作成。
using System.Collections; using System.Collections.Generic; using UnityEngine; public class PlayerJump2 : MonoBehaviour { [SerializeField] private float jumpPower; private Rigidbody2D _rigidbody; void Start() { _rigidbody = GetComponent<Rigidbody2D>(); } void Update() { if (Input.GetKey(KeyCode.Space) && _rigidbody.velocity.y == 0) { _rigidbody.velocity = new Vector2(_rigidbody.velocity.x, jumpPower); } } }
スペースキーを押した時、速度Yが0の時ジャンプするという簡単なものです。
「速度のY軸が0」と言うのはプレイヤーが上昇中でも下落中でない状態ですね。
あとはこのスクリプトをPlayerにアタッチして地面にいる時のみジャンプすればOK。

例えば上昇中はジャンプNG、下降中はジャンプOKなら下記の様な感じに。
if (Input.GetKey(KeyCode.Space) && _rigidbody.velocity.y <= 0)
絶対値(Mathf.Abs)を利用して、設定値以下の場合はジャンプ可とかも簡単に出来ますね。とはいえ、簡易的な感じですかね。