gpt4 book ai didi

unity-game-engine - 使两个物理对象不发生碰撞,但在 Unity 中检测碰撞

转载 作者:行者123 更新时间:2023-12-02 13:42:25 26 4
gpt4 key购买 nike

我有一个 Unity 项目,其中有一个 2D 游戏世界,其中包含静态碰撞器,以使几何体对于居住在其中的角色来说是实体的。玩家是一个动态碰撞器(具有非运动学刚体)。还有一个敌人角色,它也是一个动态碰撞器。两个角色都像我期望的那样在地板上行走并撞到墙壁。

我想要实现的是,玩家和敌人彼此之间并不固定,因此他们可以相互移动。我通过将敌人和玩家放在不同的层上并设置碰撞矩阵来实现这一点,以便这些层不会相互碰撞。然而,我现在遇到的问题是,我确实想检测敌人和玩家是否遇到了对方。我向敌人角色添加了一个触发碰撞器,它位于敌人层上,这意味着它不会检测到与玩家的碰撞。

我想过为敌人制作一个子游戏对象,将其放在玩家图层上,为其添加刚体并触发碰撞器,并用它来检测玩家和敌人之间的碰撞,但感觉太复杂了,让我想知道是否有更优雅的解决方案。

最佳答案

编辑(2020-05-26):现在你可以告诉引擎 ignore collisions between two given objects 。感谢 Deepscorn 的评论。将保留答案的其余部分不变,并牢记这一点进行阅读。

是的,您需要创建一个带有触发碰撞器的子GameObject,并将其放在与玩家层交互的层中。

不,您不需要向新的GameObject添加Rigidbody,父级的Rigidbody已经使其成为动态碰撞器,因此您将得到 OnTrigger 事件。

顺便说一句,为了让事情井井有条,如果你创建了敌人的 child ,不要将其放在玩家层中。例如,将来您可能需要禁用玩家与自身的图层碰撞。此外,如果您的玩家以这种方式与许多对象交互,我会在单独的 PlayerTrigger 层上将单个触发器放在玩家而不是敌人上,只是为了简单起见。

有没有更简单的方法?并不真地。您肯定需要玩家和敌人碰撞器之间没有交互,但它们之间也需要某种交互。因此其中之一需要跨越两层,否则整个交互将由单个 bool 值来描述。物理引擎一次性处理大量信息,因此您可以设置所需的所有图层和碰撞,但在物理循环期间您无法进一步控制发生的情况。您不能告诉引擎忽略两个对象之间的碰撞。只有 32 层,并且让它们以严格的方式运行实际上是重度优化。如果您担心创建另一个图层的性能,请禁用不需要的图层之间的交互,例如触发图层与地板和墙壁,或者甚至不接触的图层。

您的替代方案是通过代码完成这一切,这甚至不太优雅。播放器上的单个子胶囊现在听起来并没有那么糟糕,不是吗?

关于unity-game-engine - 使两个物理对象不发生碰撞,但在 Unity 中检测碰撞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30820093/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com