碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)

Posted

技术标签:

【中文标题】碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)【英文标题】:Unity5 OnTriggerEnter2D not called after collision (2D game) 【发布时间】:2017-04-29 16:58:05 【问题描述】:

我是 Unity3D 5 的品牌新手,我的第一个涉及碰撞检测的 2D 游戏遇到问题。我的移动对象是一个球,具有 Rigidbody2D 和 CircleCollider2D。我的固定“对撞机或触发器”是 BoxCollider,并附有脚本。 OnTriggerEnter2D 应在球通过固定框时触发。我也尝试过 OnCollisionEnter2D,但我相当肯定我应该使用 OnTriggerEnter2D,因为我的固定框被标记为触发器。

我的代码:

public class LoseCollider : MonoBehaviour 

public LevelManager levelManager;

void OnCollisionEnter2D(Collision2D collision)

    print("collide");
    levelManager.LoadLevel("Lose");


void OnTriggerEnter2D(Collider2D trigger)

    print("trigger");
    levelManager.LoadLevel("Lose");


void OnCollisionEnter(Collision collision)

    print("collide");
    levelManager.LoadLevel("Lose");


void OnTriggerEnter(Collider trigger)

    print("trigger");
    levelManager.LoadLevel("Lose");


如您所见,我正在测试所有变体,但没有一个被调用。以下是我的对象的 Unity 属性:

如果有人可以向我指出,我确定我遗漏了一些简单的东西。

【问题讨论】:

使用 boxcollider2D @CristianoSoleti 把它作为答案。 【参考方案1】:

如果您要使用OnTriggerEnter2D,您还必须使用 2D Collider。您当前正在使用BoxCollider,如第二个屏幕截图所示。

将其更改为BoxCollider2D 并且应该调用您的碰撞回调函数。

【讨论】:

谢谢!这解决了它并且很有意义。【参考方案2】:

我知道你已经解决了,但我遇到了同样的问题并找到了你的帖子。我使用了正确的 2D 对撞机,但我缺少 Ridgedbody 2D 组件。我花了一段时间才找到它,所以我想在这里添加它,以防其他人遇到同样的问题。

【讨论】:

以上是关于碰撞后未调用 Unity5 OnTriggerEnter2D(2D 游戏)的主要内容,如果未能解决你的问题,请参考以下文章

碰撞检测之Ray-Sphere检测

goBack 导航调用后未调用 componentDidMount

完成 AsyncTask 后未调用 onPostExecute

在 reloadData 后未调用 cellForRowAtIndexPath

异步任务;调用方法 onPreExecute() 后未调用 doInbackground()

滑动后未调用 didRotateFromInterfaceOrientation