From 1a0adfab4c67fc07e58a6248f55bcc3466b360b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20L=C3=BCbe=C3=9F?= Date: Sat, 6 Apr 2024 01:18:12 +0200 Subject: [PATCH] Replace with Prefab script --- .../Assets/Editor/ReplaceWithPrefab.cs | 57 +++++++++++++++++++ .../Assets/Editor/ReplaceWithPrefab.cs.meta | 11 ++++ 2 files changed, 68 insertions(+) create mode 100644 3d Prototyp/Assets/Editor/ReplaceWithPrefab.cs create mode 100644 3d Prototyp/Assets/Editor/ReplaceWithPrefab.cs.meta diff --git a/3d Prototyp/Assets/Editor/ReplaceWithPrefab.cs b/3d Prototyp/Assets/Editor/ReplaceWithPrefab.cs new file mode 100644 index 00000000..4abcfacd --- /dev/null +++ b/3d Prototyp/Assets/Editor/ReplaceWithPrefab.cs @@ -0,0 +1,57 @@ +using UnityEngine; +using UnityEditor; + +public class ReplaceWithPrefab : EditorWindow +{ + [SerializeField] private GameObject prefab; + + [MenuItem("Tools/Replace With Prefab")] + static void CreateReplaceWithPrefab() + { + EditorWindow.GetWindow(); + } + + private void OnGUI() + { + prefab = (GameObject)EditorGUILayout.ObjectField("Prefab", prefab, typeof(GameObject), false); + + if (GUILayout.Button("Replace")) + { + var selection = Selection.gameObjects; + + for (var i = selection.Length - 1; i >= 0; --i) + { + var selected = selection[i]; + var prefabType = PrefabUtility.GetPrefabType(prefab); + GameObject newObject; + + if (prefabType == PrefabType.Prefab) + { + newObject = (GameObject)PrefabUtility.InstantiatePrefab(prefab); + } + else + { + newObject = Instantiate(prefab); + newObject.name = prefab.name; + } + + if (newObject == null) + { + Debug.LogError("Error instantiating prefab"); + break; + } + + Undo.RegisterCreatedObjectUndo(newObject, "Replace With Prefabs"); + newObject.transform.parent = selected.transform.parent; + newObject.transform.localPosition = selected.transform.localPosition; + newObject.transform.localRotation = selected.transform.localRotation; + newObject.transform.localScale = selected.transform.localScale; + newObject.transform.SetSiblingIndex(selected.transform.GetSiblingIndex()); + Undo.DestroyObjectImmediate(selected); + } + } + + GUI.enabled = false; + EditorGUILayout.LabelField("Selection count: " + Selection.objects.Length); + } +} diff --git a/3d Prototyp/Assets/Editor/ReplaceWithPrefab.cs.meta b/3d Prototyp/Assets/Editor/ReplaceWithPrefab.cs.meta new file mode 100644 index 00000000..be2969a7 --- /dev/null +++ b/3d Prototyp/Assets/Editor/ReplaceWithPrefab.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed3879175cf379f499caea1fe83a6967 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: