首页 > 解决方案 > isGrounded 由 Rigidbody 和 CapsuleCollider

问题描述

尝试了不同的射线长度,仍然不起作用!如何正确配置?下面是跳转相关的代码部分

    bool isRolling = false;
    bool wannaJump = false;

    void FixedUpdate()
    {
       rb.AddForce(new Vector3(0, Physics.gravity.y * 4, 0), ForceMode.Acceleration);

        if (wannaJump && isGrounded())
        {
            rb.AddForce(new Vector3(0, JumpSpeed, 0), ForceMode.Impulse);
            wannaJump = false;
        }
    }

    void Update()
    {
        if (isGrounded())
        {
           if (Input.GetAxisRaw("Vertical") > 0)
           wannaJump = true;
        }        
    }

    bool isGrounded()
    {
        return Physics.Raycast(transform.position, Vector3.down, 0.05f);
    }

标签: c#unity3d

解决方案


您的问题在于您的 IsGrounded 方法。

而不是从对象的底部投射光线,而是从中心投射。

我建议创建一个 Vector3 来定义对象的底部并从那里投射光线而不是 transform.position。

如果您使用以下变量,它应该可以工作:

Vector3 playerBottom = new Vector3(transform.x, transform.y - (transform.localScale.y / 2), transform.z);

IsGrounded 方法应该在 playerBottom 变量而不是 transform.position 上初始化 Raycast

您还应该确保 Ray 不会与 playermodel 本身交互。只需给玩家一个图层蒙版,然后让光线投射忽略所说的图层蒙版。

有关这方面的更多信息: https ://docs.unity3d.com/ScriptReference/Physics.Raycast.html

我希望这会有所帮助!


推荐阅读