思路如下:
首先,我们需要定义一个变量来存储角色可以跳跃的次数。在起始位置,这个变量应该被初始化为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;
}
}
以下脚本需要为角色添加Character Controller组件:
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);
}
}