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的工作方式类似于嵌套循环,主要算法有:

  • 从根节点开始
  • 查找其节点子节点
  • 探望孩子
  • 返回步骤2,直到访问了所有儿童
  • 此算法可以在Unity3d中实现,因为
    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