【问题标题】:Collision between Box Collider 2D and Polygon Collider 2D not workingBox Collider 2D 和 Polygon Collider 2D 之间的碰撞不起作用
【发布时间】:2025-12-06 05:30:01
【问题描述】:

目前我正在开发一款联网的 2d 平台游戏。

我的播放器是一个空对象,它充当我的实际图形等的父对象。空对象附加了一个rigidbody (3d),因为它需要一个才能使用configurable joint 组件(注意:我使用这个 3d 刚体移动我的玩家)。然而,玩家身体,图形的孩子,有一个box collider 2d 附加到它,因为它毕竟是一个 2d 游戏并且必须与其他 2d 对象发生碰撞。

我的平台附有polygon collider 2ds(如果值得一提,它连接到平台效应器)。

现在,即使我的播放器主体(它是图形的子对象,也是我的播放器对象的子对象)和我的平台上都有 2d colliders,但它们不会发生碰撞并且可以简单地相互进入(两者都不是)它们被标记为isTrigger)。

为了解决这个问题,我想我会在播放器主体中添加一个rigidbody 2D,看看它是否会做任何事情。现在在添加rigidbody 2D 后,碰撞确实有效,但是一旦我制作了rigidbody 2D,所有位置和旋转约束都已勾选,或者一旦我制作了kinematicstatic,它就会停止与我的平台发生碰撞。问题是我需要将rigidbody 2D 设置为static 或者不能移动,因为我目前正在使用附加的rigidbody (3d) 移动我的玩家对象,并且不希望在碰撞时玩家身体有任何额外的移动与对象。

我知道这是相当多的信息,所以如果您有任何问题或想了解更多信息,请发表评论,我会尽快回复。谢谢你:-)!

编辑: 2d 射线投射也无法击中玩家身体box collider 2D

编辑 2: 回顾一下:

如果玩家身体或平台有一个rigidbody 2d,它不是静态的(动态的)并且可以移动碰撞工作。然而,目前我的播放器主体上只有一个rigidbody 2D,它必须是静态的(如前所述)以及一个box collider 2d。另一方面,我的平台目前只有polygon collider 2d,因为我不明白为什么它需要rigidbody 2D

【问题讨论】:

  • 由于这个问题与其说是关于 C#,不如说是关于 Unity,你可能想在 gamedev.stackexchange.com 上试一试
  • 是的,我会尝试......虽然这个问题对于编码人员来说非常独特,我认为这也是 Stack Overflow 的一个合适的问题。 @TimothyGroote
  • 为了确定,你能总结一下你的两个对象(平台和玩家身体)中的每一个是否有刚体/是静态的/在不碰撞时是运动的吗?跨度>
  • 可以@Isuka
  • 你去@Isuka

标签: c# unity3d collision-detection rigid-bodies


【解决方案1】:

如果静态碰撞器没有刚体、静态或具有运动学刚体,则静态碰撞器不会检测到与另一个碰撞器的碰撞。您的两个对象中的至少一个必须不是静态的,并且必须具有不能正确检测到运动学的刚体。因此,您确实需要将 Rigidbody2D 添加到您的平台。

当您对为什么一个碰撞器不会与另一个碰撞器有疑问时,请始终参考 Unity 文档中的this page,其中总结了哪种碰撞器会与另一个碰撞器发生碰撞。

【讨论】:

  • 但是由于我不能让我的玩家身体的刚体成为非静态的,我应该如何在拥有非静态刚体的同时不让我的平台在碰撞时移动? (非常感谢您的回答)
  • 不要误会我的意思:你的玩家身体的对撞机可以是静态的。但是您只需将 Rigidbody2D 添加到您的平台对象,而无需使其成为静态或运动的。它应该以这种方式工作。
  • 非常感谢,我会尽量这样做...(然后接受您的回答)
  • 是的,就像提到的那样,我现在遇到的问题是,当我降落在平台上时,平台会移动,因为它们有一个动态的刚体......(请帮我完成最后一件事我会接受你的回答)
  • @RaZ 我认为这是一个不同的问题。这个答案主要是为了回答你的基本问题:为什么你的对撞机不会检测到另一个。你也许应该打开一个不同的线程来询问如何在平台上移动你的角色而不让它们中的任何一个移动。
【解决方案2】:

Rigidbody2D 不能与 Rigidbody3D 发生碰撞,不过这里有一个解决方法

http://answers.unity3d.com/questions/580769/can-rigidbody-2d-collide-with-3d-colliders.html

【讨论】:

  • 为什么 Rigidbody2D 必须与 Rigidbody3D 发生碰撞?
  • 您的平台有 2D 的多边形对撞机,而您的玩家有 3D 刚体和 2D 对撞机 - 这意味着据我所知它们不会一起工作。
  • 哦,好吧,这开始变得更有意义了......即使它们不在同一个对象上,它们是否仍然不能一起工作,因为一个在父母身上,另一个在孩子身上
  • 你的一个物体必须有刚体才能碰撞,3D刚体只与3D碰撞器碰撞,如果你的碰撞器与你的刚体不同的游戏对象 - 它不会触发任何碰撞。它们必须位于相同的游戏对象和相同的类型(2D/3D)上。所以你需要在你的父游戏对象上拥有带有 2D 碰撞器的 2D 刚体,以便它与 2D 多边形碰撞器平台发生碰撞
  • 好的,我会试试这个解决方案,如果它对我有用,我会接受你的回答