(Unity6)二段ジャンプ/空中ジャンプの禁止&ジャンプの復活(インプットシステム)

(サンプルコード)

using UnityEngine;

public class Ball : MonoBehaviour
{
    private InputSystem_Actions isa;
    public float moveSpeed;
    private Rigidbody rb;
    public float jumpPower;

    // ★空中ジャンプ禁止
    private bool isJumping = false;

    void Start()
    {
        isa = new InputSystem_Actions();
        isa.Enable();

        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        Vector2 movement2 = isa.Player.Move.ReadValue();
        Vector3 movement3 = new Vector3(movement2.x, 0, movement2.y);
        rb.AddForce(movement3 * moveSpeed);

        // ★空中ジャンプ禁止
        if (isa.Player.Jump.triggered && isJumping == false)
        {
            rb.linearVelocity += Vector3.up * jumpPower;

            // ★空中ジャンプ禁止
            isJumping = true;
        }
    }
}

(実行確認)

・たった「1回だけ」ジャンプできれば成功


(床に触れるとジャンプの復活)

using UnityEngine;

public class Ball : MonoBehaviour
{
    private InputSystem_Actions isa;
    public float moveSpeed;
    private Rigidbody rb;
    public float jumpPower;

    // ★空中ジャンプ禁止
    private bool isJumping = false;

    void Start()
    {
        isa = new InputSystem_Actions();
        isa.Enable();

        rb = GetComponent<Rigidbody>();
    }

    void Update()
    {
        Vector2 movement2 = isa.Player.Move.ReadValue();
        Vector3 movement3 = new Vector3(movement2.x, 0, movement2.y);
        rb.AddForce(movement3 * moveSpeed);

        // ★空中ジャンプ禁止
        if (isa.Player.Jump.triggered && isJumping == false)
        {
            rb.linearVelocity += Vector3.up * jumpPower;

            // ★空中ジャンプ禁止
            isJumping = true;
        }
    }

    // ★★ジャンプの復活
    // 今回の条件は、「Floor」という「Tag」の付いたオブジェクトにぶつかった時
    private void OnCollisionEnter(Collision collision)
    {
        if (collision.gameObject.CompareTag("Floor"))
        {
            isJumping = false;
        }
    }
}

(設定)

・Floorオブジェクトに「Floor」タグを追加


(実行確認)

・空中ではジャンプできないが、床に着地するとジャンプが復活すれば成功