Unity3d 在运行时从脚本迭代所有GameObject子对象的最简单方法
在我的Unity3d 在运行时从脚本迭代所有GameObject子对象的最简单方法,unity3d,gameobject,Unity3d,Gameobject,在我的Unity3D项目中,我得到了一个复杂的GameObject卡车,他的层次结构如下所示 + Truck +FrontPivotPoint +LeftWheel Tire Rim Hindge +RightWheel Tire Rim Hindge +CenterPivotPoint +Body Arm Screw
Unity3D
项目中,我得到了一个复杂的GameObject
卡车,他的层次结构如下所示
+ Truck
+FrontPivotPoint
+LeftWheel
Tire
Rim
Hindge
+RightWheel
Tire
Rim
Hindge
+CenterPivotPoint
+Body
Arm
Screw
Pin
基本上,我做了很多复杂的育儿工作,我想让每个孩子都有一个僵硬的身体。
我想它应该是嵌套的,但我没有什么想法。
任何帮助都将不胜感激 如果我没有弄错,而且我已经有一段时间没有与Unity3D合作了,请耐心听我说,这可以解决它:
* Drag your model onto the stage
* Your entire model should now be selected; parent and its underlying children
* Select the option to add a rigidbody and it should add it to all selected objects.
* Make a prefab of the model and you should be done.
再说一次,不要相信我。已经有一段时间了,由于我现在无法访问Unity3D,所以我自己无法检查此方法
如果这是您想要的代码方法,请尝试以下方法(C#,Boo或Java的方法可能会有所不同):
得到一个孩子:(见第二个答复)
添加刚体:
我希望这会有所帮助。Unity3d可以让您轻松地自动化每个例行程序。您可以考虑添加自定义菜单项。
公共类MakeRigidBodies:EditorWindow
{
[MenuItem(“生成刚体%&r”)]
私有静态void Execute()
{
var selectedObject=UnityEditor.Selection.activeObject;
如果(selectedObject&&selectedObject是游戏对象)
{
//对于选定对象的所有子对象
{
//添加刚体
}
}
}
}
在我看来,游戏对象的结构就像一个树数据结构。Truck作为其父节点/根节点,其他节点作为其子节点。因此,必须使用树遍历算法遍历结构中的所有对象/节点,我所知道的最好的算法是深度优先搜索(DFS)算法
DFS的工作方式类似于嵌套循环,主要算法有:
GameObject
将其子信息存储在变换属性中(请参阅)。最后,我们可以使用AddComponent()
方法将RigidBody
添加到GameObject
(请参阅)
以下是我回答您问题的脚本:
使用UnityEngine;
使用系统集合;
公共类AddRigidBody:MonoBehavior{
私有void addRigidBody(GameObject GameObject)
{
刚体刚体=gameObject.AddComponent();
foreach(在gameObject.Transform中转换t)
{
addRigidBody(t.gameObject);
}
}
无效开始(){
addRigidBody(this.gameObject);
}
}
此脚本附加到父/根游戏对象
。当脚本启动时,调用AddRigidBody()
方法(如start()
方法),该方法将遍历所有子对象并通过它添加一个RigidBody