【发布时间】:2015-07-27 09:35:39
【问题描述】:
我有一个预制的 NPC,它附有一个物理装置(用来做一些特定的布娃娃的东西)。我需要避免同一装备(手臂、腿等)上的各种碰撞器相互碰撞,但它们必须能够与其他实例化 NPC 的装备发生碰撞。
有没有办法做到这一点?我知道我可以通过将它们放在单独的层上来避免所有对撞机发生碰撞,但我不能为每个 NPC 创建一个新层。
谢谢
【问题讨论】:
标签: unity3d game-physics
我有一个预制的 NPC,它附有一个物理装置(用来做一些特定的布娃娃的东西)。我需要避免同一装备(手臂、腿等)上的各种碰撞器相互碰撞,但它们必须能够与其他实例化 NPC 的装备发生碰撞。
有没有办法做到这一点?我知道我可以通过将它们放在单独的层上来避免所有对撞机发生碰撞,但我不能为每个 NPC 创建一个新层。
谢谢
【问题讨论】:
标签: unity3d game-physics
如果你有的话,你可以通过在你的 NPC 类上设置 IgnoreCollision 来做到这一点
http://docs.unity3d.com/ScriptReference/Physics.IgnoreCollision.html
如此简单的循环遍历装备中的所有对撞机并设置为相互忽略
void Start() {
colliders = GetComponentsInChildren<Collider>();
foreach(Collider collider in colliders) {
otherColliders = GetComponentsInChildren<Collider>();
foreach(Collider otherColider in otherColliders) {
if (collider != otherColider) {
Physics.IgnoreCollision(collider, otherColider);
}
}
}
}
【讨论】:
看起来不使用层而忽略碰撞的唯一方法是在一对碰撞器之间使用Physics.IgnoreCollision(),对于每一对。
您可以编写一些代码来自动注册一个新实例化的游戏对象,并在新对象和之前注册的其他对象之间创建这些对,因此您不需要自己为每个对调用此方法。
或者,您可以使用 this code 为您执行此操作 :) 它有自己的 layer 表示来控制对象应如何相互忽略。
【讨论】: