OnCollisionEnter2D() 未检测到碰撞

问题描述 投票:0回答:1

我正在制作一款主要是 3D 游戏,但也有一些 2D 迷你游戏。然而,在其中一个迷你游戏中,玩家的 OnCollisionEnter2D() 没有检测到任何其他对象的碰撞。我的代码如下:

public void OnCollisionEnter2D(Collision2D collision)
{
    Debug.Log("CollisionOccurred");
    if (collision.gameObject.tag == "PuzzleWall")
    {
        Debug.Log("Wall hit");
    }
}

不幸的是,尽管多次通过多个对象,但 Debug.Log() 都没有触发。

我已尝试以下方法来解决该问题(但无济于事):

  • 为玩家和其他对象提供具有动态主体类型的 Rigidbody2D
  • 为玩家和其他对象提供带有 IsTrigger 的 BoxCollider2D 和正确的碰撞器布局
  • 在同一脚本中将 OnCollisionEnter2D() 放在 Update() 之前
  • 检查其他对象上的标签以确保它们正确对齐
  • 检查图层碰撞矩阵以确保图层上的物体可以碰撞
  • 重新组织层次结构中的对象 我能找到的唯一提示是,尽管有 Rigidbody2D 约束,对象/玩家仍然在 z 轴上移动 10^-6。
c# unity-game-engine collision-detection game-physics game-development
1个回答
0
投票

如果您的 Collider2D 组件启用了 IsTrigger,那么您需要使用函数

OnTriggerEnter2D()
而不是
OnCollisionEnter2D()
。这是因为当您启用 IsTrigger 时,碰撞器的行为并不像实际的碰撞器,而是一个触发器。

© www.soinside.com 2019 - 2024. All rights reserved.