如何在编辑模式下通过脚本在层次结构中添加游戏对象?
How to add gameobjects via script in the hierarchy in edit mode?
我想创建一个菜单项,它可以构建一个包含子项和组件的游戏对象。
我不能对整个对象使用预制件,因为我需要子项是单独的预制件。
你可以这样使用:
[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;
并将脚本放在 Editor/ 文件夹中或使用编辑器在部件周围使用 #if UNITY_EDITOR / #endif
方法。我还使用 %&n
(Ctrl + Alt + N) 添加了 MenuItem 的快捷方式。
如果您需要更改组成实例化对象的预制件,您可以尝试在您的项目中检索它们(根据您的项目,可能是繁重的操作),就像他们所做的那样here and display a kind of checklist where you select the prefabs needed as children inside an EditorWindow。
我想创建一个菜单项,它可以构建一个包含子项和组件的游戏对象。 我不能对整个对象使用预制件,因为我需要子项是单独的预制件。
你可以这样使用:
[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;
并将脚本放在 Editor/ 文件夹中或使用编辑器在部件周围使用 #if UNITY_EDITOR / #endif
方法。我还使用 %&n
(Ctrl + Alt + N) 添加了 MenuItem 的快捷方式。
如果您需要更改组成实例化对象的预制件,您可以尝试在您的项目中检索它们(根据您的项目,可能是繁重的操作),就像他们所做的那样here and display a kind of checklist where you select the prefabs needed as children inside an EditorWindow。