Unity - 检查播放器是否接地不起作用

3 c# unity-game-engine

我希望玩家在接地时跳跃。

private void OnTriggerStay(Collider other)
{
    if(other.gameObject.layer == 8)
    {
        isGrounded = true;
    }else { isGrounded = false; }
}
Run Code Online (Sandbox Code Playgroud)

玩家在生成时处于直播状态。之后玩家落到了地形,其中有标签GroundisGrounded仍然是假的。当我手动将 isGrounded 设置为 true 并再次跳转时,碰撞后仍然为 true。我也不希望玩家在空中双跳,我可能已经编码但由于出现问题而无法正常工作。

更改OnTriggerStayOnTriggerEnter不会改变某些内容。我希望你能帮助我。

Pro*_*mer 6

千万不能使用OnTriggerStay做到这一点。这不能保证每次都是真的。

OnCollisionEnter调用时将 isGrounded 标志设置为 true 。OnCollisionExit调用时将其设置为 false 。

bool isGrounded = true;

private float jumpForce = 2f;
private Rigidbody pRigidBody;

void Start()
{
    pRigidBody = GetComponent<Rigidbody>();
}

private void Update()
{
    if (Input.GetButtonDown("Jump") && isGrounded)
    {
        pRigidBody.AddForce(new Vector3(0, jumpForce, 0));
    }
}

void OnCollisionEnter(Collision collision)
{
    Debug.Log("Entered");
    if (collision.gameObject.CompareTag("Ground"))
    {
        isGrounded = true;
    }
}

void OnCollisionExit(Collision collision)
{
    Debug.Log("Exited");
    if (collision.gameObject.CompareTag("Ground"))
    {
        isGrounded = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

在你说它不起作用之前,请检查以下内容:

  • 您必须拥有RigidbodyRigidbody2D附加到播放器。

  • 如果是这样Rigidbody2D,您必须使用OnCollisionEnter2DOnCollisionExit2D

  • 您必须在禁用 IsTrigger 的情况下将碰撞器连接到播放器。

  • 确保你没有移动Rigidbody与转换,如transform.positiontransform.Translate。你必须Rigidbody随着MovePosition功能移动 。