【Unity3d】在3D项目中如何实现角色的二段跳

        思路如下:

        首先,我们需要定义一个变量来存储角色可以跳跃的次数。在起始位置,这个变量应该被初始化为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);
    }
}

猜你喜欢

转载自blog.csdn.net/m0_51942776/article/details/130452433