【问题标题】:Enemies don't collide with each other敌人不会相互碰撞
【发布时间】:2019-03-27 09:19:29
【问题描述】:

我从同一个预制件中创建了 3 个没有相互碰撞的敌人。

预制游戏对象具有胶囊碰撞器和刚体。重力和运动学都被启用,所有的碰撞器都被触发。它们的基本功能是追逐玩家角色。当他们这样做时,此刻他们都汇聚在同一个点上并最终相互重叠。我怎样才能让它们相互碰撞?

我的层次结构如下:

骨架设置如下:

攻击传感器设置如下:

这些是我的碰撞矩阵设置

【问题讨论】:

  • 这里几乎没有任何信息可以使用。 请通读上面提供的页面并编辑帖子,以便我们更好地为您提供帮助
  • @Tofik 想通过粘贴链接告诉我们,真正看到一个最小、完整且可验证的示例对我们非常有帮助。
  • @NoelWidmer 是的,抱歉,应该解释一下。
  • 致所有说我们缺乏信息的人:他的问题不是关于编码,而是一个统一的问题。可能没有一行代码与此问题相关。除了发布统一项目之外,OP 无法发布最小示例。如果你在阅读问题时不理解,说明你对 Unity 的了解不够,无法判断

标签: c# unity3d collision-detection


【解决方案1】:

所以你有Kinematic Rigidbody Trigger Collider 与另一个Kinematic Rigidbody Trigger Collider 发生冲突,如此处所示unity collision messages 它应该可以工作。

你的碰撞层呢?默认值是否与默认值冲突?(在物理选项卡中查看)

另外,我之前做过类似的事情,我可以建议您使用一个胶囊对撞机作为骨架的身体(不是触发器)和一个子对象作为攻击传感器(球形触发器对撞机更适合)。这将帮助您分离身体的物理和攻击逻辑。

cmets 中的答案:

*capsule collider:在你的骨架变换上,图层为“默认”,而不是触发

球体对撞机:在具有“attackSensors”层或其他任何子层的空变换上,这个是触发器。

在碰撞矩阵上禁用“attackSensor”层之间的碰撞,这将节省您的性能,避免攻击传感器之间的碰撞。

这样你就可以拥有:

  1. 带有身体碰撞器的骨架,它也使用重力(重力不适用于运动刚体)并响应碰撞。

  2. 当与另一个骨架的刚体碰撞时触发事件的触发器。*

【讨论】:

  • 不,不应该,那些是触发器,它们永远不会碰撞。
  • 看看自己的桌子:)
  • 是的,触发器与触发器在此表中的“碰撞时发送触发消息”下,这意味着没有可见的碰撞,而只是一个触发消息
  • 是的,这就是为什么他的 OnTriggerEnter 应该可以工作,但他有敌人重叠的问题,正如我建议的那样,一个好的解决方案是使用 2 个碰撞器和单独的逻辑,如果他使用 2 层会更好
  • 何,所以我们同意他需要一个不是触发器的对撞机才能实际看到碰撞(无重叠)。不清楚对不起。添加第二个对撞机就可以了。
【解决方案2】:

问题在于您如何设置对象:

  • Kinematic 表示对象将自行设置其值。两个运动对象不会发生碰撞(它们不会让对象告诉它们该做什么)
  • Trigger 表示物体不发生碰撞。它只是触发您可以在代码中使用的函数。取消选择以查看冲突

以更一般的方式,您应该确保了解哪种类型的对象可以相互碰撞。看看Collider documentation。在页面底部,有一个很好的表格解释了这一点。

【讨论】:

  • 嗨,巴西尔。如果我打开运动学,物体会从地板上掉下来,我的代码中有一个触发器 Enter 来处理与玩家子弹碰撞的敌人。
  • 作为触发器的对撞机永远不会发生碰撞。如果您想查看冲突但代码中仍有方法,请改用 onCollisionEnter
【解决方案3】:

使用 Unity 动画制作器通常会使动画对象在游戏世界空间之外思考,因此它们实际上是与游戏分离的实体。但是,您可以使用光线投射来检测彼此的碰撞器,并通过这种方法使它们看起来相互碰撞。

【讨论】:

    猜你喜欢
    • 2022-01-11
    • 1970-01-01
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多