繁体   English   中英

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

[英]Unity - Checking if the player is grounded not working

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

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

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

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

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

设置isGrounded标志设置为true时OnCollisionEnter被调用。 调用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;
    }
}

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

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

  • 如果此Rigidbody2D ,则必须使用OnCollisionEnter2DOnCollisionExit2D

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

  • 确保您没有使用诸如transform.positiontransform.Translate类的变换移动Rigidbody 你必须移动RigidbodyMovePosition功能。

使用它来检查是否完全检测到碰撞,这是进一步调试的良好起点:

private void OnTriggerStay(Collider other)
{
   Debug.Log(other);
}

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

我想你的意思是启用? 我一直在努力让它工作,但是一旦我启用了对撞机的 IsTrigger,它就开始实际工作。 OnTriggerEnter/Exit 在实际上不是触发器的对撞机上似乎没有太大作用......

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM