Unity - 激活“是触发器”会导致物体穿过其他物体

4

我正在按照这个教程学习:https://www.mvcode.com/lessons/roll-a-ball-obstacle-course

在最后,我们创建了敌人(立方体),他们的移动非常好。但是当我激活“is Trigger”时,它们会掉到平面下面进入虚空。我错过了什么吗?

我试图将它们拉到地板上方,以便底部和敌人之间有一些间隔,但它们仍然穿过地板,只有在启用“is Trigger”时才会掉下去。

提前感谢, Akuma


这就是 isTrigger 的作用 - Daahrien
2个回答

17

或者(对于那些想要或需要在他们的立方体上启用重力的人):

添加第二个碰撞体。

Two colliders, one box

没有任何阻止你这样做。你可以使触发器更大,或者只需调整物理层碰撞设置,以使将敌人保持在地面上的碰撞体不会干扰与玩家相撞等操作。


将立方体作为触发器的想法是为了确保玩家不会与立方体碰撞。立方体就像马里奥游戏中的硬币。想象一下与硬币碰撞的情况,那将破坏游戏体验。立方体还在旋转,这将影响立方体的旋转。此外,将多个具有不同“IsTrigger”设置的碰撞器附加到一个游戏对象上会引入难以治愈的错误。如果需要使用多个碰撞器,则它们应该是游戏对象的子级,而不是直接附加到游戏对象上。最后,您永远不应将相同类型的碰撞器附加到同一游戏对象上。 - Programmer
这真的取决于使用情况。您可以使触发器体积大于碰撞体积(碰撞体积只需足够大以防止其穿过地板)。至于“不要将相同类型的碰撞体附加到同一游戏对象”:我不同意。Unity 自己甚至指出,对于步枪,使用3个盒子碰撞体比使用单个网格碰撞体更高效,并且可以实现可比较的结果:每个碰撞体只是具有不同的大小和偏移量。 - Draco18s no longer trusts SE
你可以将触发器体积设置得比碰撞体积大(只需足够大以防止其穿过地板)。你不明白。这样做行不通,因为方块是在旋转的。方块应该保持在一个位置上无限旋转。如果你这样做并且它们接触到地板,它们会改变位置,并且还会干扰它们的旋转,因为它们与地板发生了碰撞。我们都不希望在游戏中出现这两种情况。 - Programmer
"Unity 自己甚至指出,对于一把步枪来说,使用 3 个包围盒碰撞器比单一网格碰撞器的性能要好得多,并且可以达到相似的结果。"这被称为“复合碰撞器”,我同意这一点。你没有理解我的评论。你不应该将多个碰撞器附加到相同的游戏对象上。你应该将每个碰撞器作为网格的子游戏对象放置。不要将多个碰撞器附加到相同的游戏对象上。你的回答显示了一个对象上的多个碰撞器。这是错误的! - Programmer
从Unity引用:“要创建复合碰撞体,请创建与您的碰撞对象的子对象,然后为每个子对象添加一个Collider组件。”顺便说一下,这个是OP错过的步骤。 - Programmer
显示剩余2条评论

5

很可能是立方体在地面上方。启用"Is Trigger"后,碰撞将被禁用,因此立方体会穿过地面。

解决方法是在立方体的Rigidbody上禁用"Use Gravity"。

enter image description here

请注意,您正在遵循剽窃版的原始"Roll-a-ball tutorial"教程,其中省略了许多内容。您应该遵循原始教程这里。观看来自视频的10秒,描述了您错过的内容,即我上面所描述的内容。


1
不,完全相反。关闭“is Trigger”时,立方体完美地坐在地面上,并按预期移动。打开“is Trigger”时,立方体会穿过地板。重力已经被检查。 - Exportforce
1
那是一个打字错误。我本意是说“启用”而不是“禁用”。请在继续评论之前尝试答案。这将避免不必要的评论。 - Programmer
嗯,你正在跟随的教程忽略了这一点,我认为他们还会忽略很多其他事情。你可以通过在时间轴上拖动鼠标来滚动YouTube视频。你也可以快进和倒带,但是由于你不喜欢视频教程,我觉得这可能没有什么帮助。 - Programmer
1
但是如果我需要重力呢? - shinzou
如果你正在按照我在答案中提供的链接的滚球教程进行操作,那么你就不需要重力。只需按照那里的指示进行操作即可。 - Programmer
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接