如何在编辑模式下通过脚本在层次结构中添加gameobjects?

时间:2017-03-26 14:10:35

标签: unity3d unity-editor

我想创建一个菜单项,可以构建一个包含子项和组件的游戏对象。 我不能为整个物品使用预制件,因为我需要孩子们是单独的预制件。

1 个答案:

答案 0 :(得分:2)

您可以使用以下内容:

[MenuItem("YOUR_MENU_NAME/YOUR_SUBMENU_NAME/YOUR_METHOD_NAME %&n")]
static void CreateAPrefab()
{
    //Parent
    GameObject prefab = (GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<Object>("Assets/Prefabs/TestPrefab.prefab"));
    prefab.name = "TestPrefab";

    if(Selection.activeTransform != null)
    {
        prefab.transform.SetParent(Selection.activeTransform, false);
    }
    prefab.transform.localPosition = Vector3.zero;
    prefab.transform.localEulerAngles = Vector3.zero;
    prefab.transform.localScale = Vector3.one;

    //Child 1
    GameObject prefabChild1 = (GameObject)PrefabUtility.InstantiatePrefab(AssetDatabase.LoadAssetAtPath<Object>("Assets/Prefabs/TestPrefabChild1.prefab"));
    prefabChild1.name = "TestPrefabChild";

    prefabChild1.transform.SetParent(prefab.transform, false);
    prefabChild1.transform.localPosition = Vector3.zero;
    prefabChild1.transform.localEulerAngles = Vector3.zero;
    prefabChild1.transform.localScale = Vector3.one;

    //Child2...
    //...

    Selection.activeGameObject = prefab;
}

不要忘记包含using UnityEditor;并将脚本放在编辑器/ 文件夹中,或者使用编辑器方法在部件周围使用#if UNITY_EDITOR / #endif。我还使用%&n(Ctrl + Alt + N)添加了MenuItem的快捷方式。

如果您需要更改组成实例化对象的预制件,您可以尝试在项目中检索所有这些预制件(可能是根据您的项目进行繁重操作)here并显示一种清单,您可以在EditorWindow内选择所需的预制件作为子项。