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

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)を利用して、設定値以下の場合はジャンプ可とかも簡単に出来ますね。とはいえ、簡易的な感じですかね。

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