碰到另一个对象时,不会触发OnTriggerEnter

时间:2019-11-24 17:25:26

标签: c# unity3d

public void OnTriggerEnter2D(Collider2D col)
{
    if(col.tag == "PowerUp")
    {
        Debug.Log("You've got a ");
    }

我有一个球和一个加电装置,我希望球碰到加电装置并基本上通过碰撞来激活,但这是行不通的。 我为播放器添加了刚体,并为播放器和加电装置添加了碰撞。

1 个答案:

答案 0 :(得分:1)

假设您正在谈论Unity中的2D碰撞触发器,则需要满足以下两个条件:

  • 所有“碰撞”的对象都必须具有Collider2D组件(例如BoxCollider2D)。
  • “碰撞”对象中至少有一个需要具有Rigidbody2D组件。
  • 至少有一个对象需要将其Collider2D配置为触发器。

此后,将在所有“碰撞”的相关对象上调用OnTriggerEnter2D()方法。


根据您的描述,您似乎只需要在检查器中将Is Trigger属性设置为true

"Is Trigger" checked in the Inspector

根据您的游戏设计,将Power-Ups配置为(仅)触发器以使玩家保持常规对撞机可能是有益的;这将使玩家仍能与环境进行物理交互,同时能够触发感兴趣的对象。


换句话说,您可能还想交换标签比较代码

if (col.tag == "PowerUp")

通过CompareTag()调用,如下所示:

if (col.CompareTag("PowerUp"))

原因有点技术问题,但简短的版本是它速度更快,从长远来看可以使您从内存相关的问题中解脱出来,如果该标签没有,您将在控制台中收到特定于Unity的错误存在。