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

时间:2017-06-14 08:17:56

标签: c# unity3d

我希望玩家在玩家停飞时跳跃。

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

播出时播放器播出。播放器落入具有标记Ground的地形后,isGrounded仍为假。当我手动设置isGrounded并再次跳转时,它在碰撞后仍然是真的。我也不希望玩家在空中双跳,我可能已编码但由于出了问题而无法正常工作。

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

2 个答案:

答案 0 :(得分:2)

使用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;
    }
}

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

  • 您必须在播放器上附加RigidbodyRigidbody2D

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

  • 您必须使用IsTrigger将Collider连接到播放器 禁用。

  • 确保您没有使用此类转换移动Rigidbody 作为transform.positiontransform.Translate。你必须搬家 具有MovePosition功能的Rigidbody

答案 1 :(得分:0)

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

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