unity删除碰撞物理影响,还要检查是否有碰撞

时间:2018-12-06 18:42:54

标签: c# unity3d

我有一个看起来像这样的函数:

private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject.name == "Despawner")
    {
        Destroy(this.gameObject);
    }
    if (collision.gameObject.name == "Char")
    {
        Destroy(this.gameObject);
        ScoreHandler.coinsCollected++;
    }
}

基本上,我想要的是如果硬币与玩家发生碰撞,我希望移除硬币,而且还希望消除碰撞的物理影响,所以如果我从下面跳到硬币上,我的角色不会跌倒在地上,它越过它并像将其收集一样将其移除。

我还尝试将OnCollisionEnter2D更改为OnTriggerEnter2D,但没有成功。

编辑:我从OnTriggerEnter2D更改为OnCollisionEnter2D。现在,角色穿过硬币但不捡硬币,就像根本没有碰撞一样,还检查了编辑器中的IsTrigger GameObject

2 个答案:

答案 0 :(得分:0)

您应该能够检测到碰撞并忽略它。我对弹丸做了类似的处理,有时会相互重叠并弹起。

private void OnCollisionEnter2D(Collision2D collision) // or OnCollisionStay2D
{
    Physics2D.IgnoreCollision (this.gameObject.GetComponent<Collider2D> (), collision.gameObject.GetComponent<Collider2D> ());
    Destroy(this.gameObject);
    ScoreHandler.coinsCollected++;
}

答案 1 :(得分:0)

我必须使用触发器,而不是碰撞及其工作。

private void OnTriggerEnter2D(Collider2D collision)
{
    if (collision.gameObject.name == "Despawner")
    {
        Destroy(this.gameObject);
    }
    if (collision.gameObject.name == "Char")
    {
        Destroy(this.gameObject);
        ScoreHandler.coinsCollected++;
    }
}