Replaces the targetPrefab
with a copy of the game object hierarchy go
.
Returns the prefab game object after it has been created.
If connectToPrefab
is enabled go
will be made an instance of the created prefab.
#pragma strict
// Creates a prefab from the selected GameObjects. // if the prefab already exists it asks if you want to replace it
@MenuItem("Examples/Create Prefab From Selected") static function CreatePrefab() { var objs = Selection.gameObjects;
for (var go : GameObject in objs) { var localPath : String = "Assets/" + go.name + ".prefab"; if (AssetDatabase.LoadAssetAtPath(localPath, GameObject)) { if (EditorUtility.DisplayDialog("Are you sure?", "The prefab already exists. Do you want to overwrite it?", "Yes", "No")) CreateNew(go, localPath); } else CreateNew(go, localPath); } }
@MenuItem("Examples/Create Prefab From Selected", true) static function ValidateCreatePrefab() { return Selection.activeGameObject != null; }
static function CreateNew(obj : GameObject, localPath : String) { var prefab : UnityEngine.Object = PrefabUtility.CreateEmptyPrefab(localPath); PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab); }
// Creates a prefab from the selected GameObjects. // If the prefab already exists it asks if you want to replace it.
using UnityEngine; using UnityEditor;
public class ExampleClass : EditorWindow { [MenuItem("Examples/Create Prefab From Selected")] static void CreatePrefab() { GameObject[] objs = Selection.gameObjects;
foreach (GameObject go in objs) { string localPath = "Assets/" + go.name + ".prefab"; if (AssetDatabase.LoadAssetAtPath(localPath, typeof(GameObject))) { if (EditorUtility.DisplayDialog("Are you sure?", "The prefab already exists. Do you want to overwrite it?", "Yes", "No")) { CreateNew(go, localPath); } } else { CreateNew(go, localPath); } } }
// Disable the menu item if no selection is in place [MenuItem("Examples/Create Prefab From Selected", true)] static bool ValidateCreatePrefab() { return Selection.activeGameObject != null; }
static void CreateNew(GameObject obj, string localPath) { Object prefab = PrefabUtility.CreateEmptyPrefab(localPath); PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab); } }