考え方は次のとおりです。
まず、キャラクターがジャンプできる回数を保存する変数を定義する必要があります。開始位置では、この変数は 2 に初期化される必要があります。次に、ジャンプキーが押されたときに、ジャンプカウンタの値を確認します。この値が 0 より大きい場合、キャラクターはジャンプできます。キャラクターのジャンプカウンターが1減少し、ジャンプアップする必要があります。キャラクターが空中にいるときにジャンプキーを押したとき、ジャンプカウンターの値を確認します。この値が 0 より大きい場合、キャラクターは再びジャンプできます。キャラクターのジャンプカウンターは 1 減少し、再びジャンプする必要があります。
次のスクリプトでは、コライダーと剛体コンポーネントをキャラクターに追加する必要があります。
public class PlayerController : MonoBehaviour
{
public float jumpForce = 5f;
public int maxJumps = 2;
private int jumps;
private Rigidbody rb;
private void Start()
{
rb = GetComponent<Rigidbody>();
jumps = maxJumps;
}
private void Update()
{
if (Input.GetButtonDown("Jump"))
{
if (jumps > 0)
{
rb.velocity = new Vector3(rb.velocity.x, jumpForce, rb.velocity.z);
jumps--;
}
}
}
private void OnCollisionEnter(Collision collision)
{
jumps = maxJumps;
}
}
次のスクリプトでは、キャラクター コントローラー コンポーネントをキャラクターに追加する必要があります。
public class PlayerController : MonoBehaviour
{
public float jumpForce = 5f;
public int maxJumps = 2;
private int jumps;
private CharacterController controller;
private Vector3 moveDirection = Vector3.zero;
private void Start()
{
controller = GetComponent<CharacterController>();
jumps = maxJumps;
}
private void Update()
{
if (controller.isGrounded)
{
jumps = maxJumps;
}
if (Input.GetButtonDown("Jump"))
{
if (jumps > 0)
{
moveDirection.y = jumpForce;
jumps--;
}
}
moveDirection.y -= Time.deltaTime * 9.81f;
controller.Move(moveDirection * Time.deltaTime);
}
}