同一对象上的Unity多个碰撞器

10

我在同一GameObject上使用了几个盒子碰撞器,问题是,是否可能使用
gameObject.getComponent().enabled = false;
分别指定每个碰撞器?请记住,我有几个碰撞器,我希望其中一些保持启用状态,而其他碰撞器则被禁用。


2
你可以使用GetComponents(或GetComponentsInChildren)找到它们,但是你如何区分它们呢?在这种情况下,我经常会附加一个额外的脚本,通过我在检查器中设置的列表/数组来跟踪其他组件。 - rutter
是的,这正是我所担心的问题。我希望在Unity 5中它们已经为碰撞器添加了编号或命名...真的很令人沮丧 :/ - Metaldream
你可以将每个碰撞器保存在一个数组中,然后逐个访问它们。你需要知道哪个是哪个,还是只是将它们放在数组中,以便可以使用索引访问它们? - Programmer
具体来说,问题得以解决是因为我只需要3个碰撞器,这使得可以拥有一个多边形+盒子+圆形,然后很容易单独引用每个碰撞器。但是我认为,对于超过3个碰撞器,碰撞器数组是必不可少的。 - Metaldream
3个回答

13
我所做的是创建空的子游戏对象(每个碰撞器一个GameObject),并将碰撞器分配给它们,然后我会为这些子对象分配标签(在您的情况下可以是“AlwaysActive”和“SwitchingActive”,或者您能想出更好的名称)。
然后,在父对象中,我将使用GetComponentsinChildren<Collider>来查找所有碰撞器,并检查游戏对象的标签(对应于碰撞器)是否符合我的要求。如果符合,我将执行所需的任务,否则跳过。
注意:子游戏对象上的碰撞器不会在父脚本中调用OnTriggerEnterOnCollisionEnter。我使用委托策略将来自子游戏对象的碰撞传递到我的父游戏对象。

注意:子游戏对象上的碰撞器不会在父级脚本中调用OnTriggerEnter或OnCollisionEnter。--- 这就是我正在寻找的信息,谢谢! - Markus Weninger

1

你可以通过脚本生成所有的碰撞器

var collider1 = gameObject.AddComponent<BoxCollider>();  
var collider2 = ...  
...  

然后您可以为每个碰撞体设置所有属性
https://docs.unity3d.com/ScriptReference/Collider.html
因此,您可以根据需要使用每个碰撞体的变量


0

虽然有点老,但或许可以帮到你: 你可以在一个gameObject中获取多个组件:

  Collider[] colls = GetComponents<Collider>();
             foreach(var col in colls){
                 col.isTrigger = false;
             }

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