我在同一个游戏对象上使用了几个方块碰撞器,问题是,是否可以分别使用getComponent().enabled = false;请记住,我有几个碰撞器,我希望他们中的一些保持启用,而其他人将被禁用。
cfh9epnr1#
我所做的是创建空的子游戏对象[每个碰撞器一个游戏对象]并为它们分配碰撞器,然后我会为这些子对象分配标签[在您的情况下,它们可以是'AlwaysActive'和'SwitchingActive'或您可以想出的任何更好的名称]。然后在父对象中,我将使用GetComponentsinChildren<Collider>查找所有碰撞器,并检查(相应碰撞器的)GameObject的标记是否符合我的要求。如果符合,我将执行所需的任务,否则跳过它。注意:子游戏对象上的碰撞器不会调用父脚本中的OnTriggerEnter或OnCollisionEnter。我使用委托策略从子游戏对象到我的父游戏对象获得碰撞。
GetComponentsinChildren<Collider>
OnTriggerEnter
OnCollisionEnter
fkaflof62#
您可以通过脚本生成所有碰撞器
var collider1 = gameObject.AddComponent<BoxCollider>(); var collider2 = ... ...
然后你可以设置每个碰撞器的所有属性https://docs.unity3d.com/ScriptReference/Collider.html所以你可以按你想要的那样通过it变量来使用每一个碰撞器
v09wglhw3#
老了,但可能有帮助:你可以在一个gameObject中得到多个组件:
Collider[] colls = GetComponents<Collider>(); foreach(var col in colls){ col.isTrigger = false; }
3条答案
按热度按时间cfh9epnr1#
我所做的是创建空的子游戏对象[每个碰撞器一个游戏对象]并为它们分配碰撞器,然后我会为这些子对象分配标签[在您的情况下,它们可以是'AlwaysActive'和'SwitchingActive'或您可以想出的任何更好的名称]。
然后在父对象中,我将使用
GetComponentsinChildren<Collider>
查找所有碰撞器,并检查(相应碰撞器的)GameObject的标记是否符合我的要求。如果符合,我将执行所需的任务,否则跳过它。注意:子游戏对象上的碰撞器不会调用父脚本中的
OnTriggerEnter
或OnCollisionEnter
。我使用委托策略从子游戏对象到我的父游戏对象获得碰撞。fkaflof62#
您可以通过脚本生成所有碰撞器
然后你可以设置每个碰撞器的所有属性
https://docs.unity3d.com/ScriptReference/Collider.html
所以你可以按你想要的那样通过it变量来使用每一个碰撞器
v09wglhw3#
老了,但可能有帮助:你可以在一个gameObject中得到多个组件: