敌人不会互相碰撞

时间:2018-10-23 07:56:48

标签: c# unity3d collision-detection

我有3个彼此冲突的敌人,它们来自同一预制件。

预制游戏对象具有胶囊对撞机和刚体。重力和运动学均已启用,所有对撞机均被触发。他们的基本功能是追逐玩家角色。当他们这样做时,目前他们都收敛于同一点,最终彼此重叠。我怎么弄到它们彼此碰撞?

我的层次结构如下:

The Hierarchy

骨架设置如下:

Skeleton Inspector

攻击传感器的设置如下:

Attack sensor Inspector

这些是我的碰撞矩阵设置

Physics Matrix

3 个答案:

答案 0 :(得分:1)

问题在于如何设置对象:

  • 运动学表示对象将自行设置其值。两个运动学对象不会发生冲突(它们不会让对象告诉他们该怎么做)
  • 触发表示该对象不会碰撞。它只是触发您可以在代码中使用的功能。取消选择此项以查看冲突

以更一般的方式,您应该确保了解哪种对象可以相互碰撞。看看Collider documentation。在页面底部,有一个漂亮的表对此进行了解释。

答案 1 :(得分:1)

因此,您有Kinematic Rigidbody Trigger Collider与另一个Kinematic Rigidbody Trigger Collider发生冲突,如下图unity collision messages所示。

您的碰撞层如何?是默认值与默认值冲突吗?(请检查物理选项卡)

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

评论答案:

*胶囊对撞机:在骨骼的“默认”层上进行变换,而不触发

球体对撞机:在一个空的转换中,该转换是具有“ attackSensors”层或其他任何层的子级,它是触发器。

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

这样您就可以拥有:

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

  2. 与其他骨架的刚体碰撞时将触发事件的触发器。*

答案 2 :(得分:0)

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