Version: 2019.1

PrefabUtility

class in UnityEditor

Switch to Manual

Description

Utility class for any Prefab related operations.

//Create a folder (right click in the Assets directory, click Create>New Folder) and name it “Editor” if one doesn’t exist already.
//Place this script in that folder

//This script creates a new menu and a new menu item in the Editor window // Use the new menu item to create a Prefab at the given path. If a Prefab already exists it asks if you want to replace it //Click on a GameObject in your Hierarchy, then go to Examples>Create Prefab to see it in action.

using UnityEngine; using UnityEditor;

public class Example : EditorWindow { //Creates a new menu (Examples) with a menu item (Create Prefab) [MenuItem("Examples/Create Prefab")] static void CreatePrefab() { //Keep track of the currently selected GameObject(s) GameObject[] objectArray = Selection.gameObjects;

//Loop through every GameObject in the array above foreach (GameObject gameObject in objectArray) { //Set the path as within the Assets folder, and name it as the GameObject's name with the .prefab format string localPath = "Assets/" + gameObject.name + ".prefab";

//Check if the Prefab and/or name already exists at the path if (AssetDatabase.LoadAssetAtPath(localPath, typeof(GameObject))) { //Create dialog to ask if User is sure they want to overwrite existing Prefab if (EditorUtility.DisplayDialog("Are you sure?", "The Prefab already exists. Do you want to overwrite it?", "Yes", "No")) //If the user presses the yes button, create the Prefab { CreateNew(gameObject, localPath); } } //If the name doesn't exist, create the new Prefab else { Debug.Log(gameObject.name + " is not a Prefab, will convert"); CreateNew(gameObject, localPath); } } }

// Disable the menu item if no selection is in place [MenuItem("Examples/Create Prefab", true)] static bool ValidateCreatePrefab() { return Selection.activeGameObject != null; }

static void CreateNew(GameObject obj, string localPath) { //Create a new Prefab at the path given Object prefab = PrefabUtility.CreatePrefab(localPath, obj); PrefabUtility.ReplacePrefab(obj, prefab, ReplacePrefabOptions.ConnectToPrefab); } }

Static Variables

prefabInstanceUpdatedCalled after Prefab instances in the Scene have been updated.

Static Functions

ApplyAddedComponentApplies the added component to the Prefab Asset at the given asset path.
ApplyAddedGameObjectApplies the added GameObject to the Prefab Asset at the given asset path.
ApplyObjectOverrideApplies all overridden properties on a Prefab instance component or GameObject to the Prefab Asset at the given asset path.
ApplyPrefabInstanceApplies all overrides on a Prefab instance to its Prefab Asset.
ApplyPropertyOverrideApplies a single overridden property on a Prefab instance to the Prefab Asset at the given asset path.
ApplyRemovedComponentRemoves the component from the Prefab Asset which has the component on it.
GetAddedComponentsReturns a list of PrefabUtility.AddedComponent objects which contain information about added component overrides on the Prefab instance.
GetAddedGameObjectsReturns a list of PrefabUtility.AddedGameObject objects which contain information about added GameObjects on the Prefab instance.
GetCorrespondingObjectFromOriginalSourceReturns the object of origin for the given object.
GetCorrespondingObjectFromSourceReturns the corresponding asset object of source, or null if it can't be found.
GetCorrespondingObjectFromSourceAtPathReturns the corresponding object of the given object from a given Prefab Asset path.
GetIconForGameObjectReturns the icon for the given GameObject.
GetNearestPrefabInstanceRootReturn the GameObject that is the root of the nearest Prefab instance the object is part of.
GetObjectOverridesReturns a list of objects with information about object overrides on the Prefab instance.
GetOutermostPrefabInstanceRootReturns the GameObject that is the root of the outermost Prefab instance the object is part of.
GetPrefabAssetPathOfNearestInstanceRootReturns the asset path of the nearest Prefab instance root the specified object is part of.
GetPrefabAssetTypeEnum value indicating the type of Prefab Asset, such as Regular Prefab, Model Prefab and Prefab Variant.
GetPrefabInstanceHandleThis function will give you the PrefabInstance object for the outermost Prefab instance the provided object is part of.
GetPrefabInstanceStatusEnum value with status about whether a Prefab instance is properly connected to its asset.
GetPropertyModificationsExtract all modifications that are applied to the Prefab instance compared to the parent Prefab.
GetRemovedComponentsReturns a list of objects with information about removed component overrides on the Prefab instance.
InstantiateAttachedAssetInstantiate an asset that is referenced by a Prefab and use it on the Prefab instance.
InstantiatePrefabInstantiates the given Prefab in a given Scene.
IsAddedComponentOverrideIs this component added to a Prefab instance as an override?
IsAddedGameObjectOverrideIs this GameObject added as a child to a Prefab instance as an override?
IsAnyPrefabInstanceRootIs the GameObject the root of any Prefab instance?
IsDefaultOverrideReturns true if the given modification is considered a default override.
IsDisconnectedFromPrefabAssetReturns true if the given object is part of an instance where the PrefabInstance object is missing but the given object has a valid corresponding object.
IsOutermostPrefabInstanceRootIs the GameObject the root of a Prefab instance, excluding nested Prefabs?
IsPartOfAnyPrefabReturns true if the given object is part of any kind of Prefab.
IsPartOfImmutablePrefabIs this object part of a Prefab that cannot be edited?
IsPartOfModelPrefabReturns true if the given object is part of a Model Prefab Asset or Model Prefab instance.
IsPartOfNonAssetPrefabInstanceReturns true if the given object is part of a Prefab instance and not part of an asset.
IsPartOfPrefabAssetReturns true if the given object is part of a Prefab Asset.
IsPartOfPrefabInstanceReturns true if the given object is part of a Prefab instance.
IsPartOfPrefabThatCanBeAppliedToIs this object part of a Prefab that cannot be applied to?
IsPartOfRegularPrefabReturns true if the given object is part of a regular Prefab instance or Prefab Asset.
IsPartOfVariantPrefabReturns true if the given object is part of a Prefab Variant Asset or Prefab Variant instance.
IsPrefabAssetMissingReturns true if the given object is part of a Prefab instance but the source asset is missing.
LoadPrefabContentsLoads a Prefab Asset at a given path into an isolated Scene and returns the root GameObject of the Prefab.
LoadPrefabContentsIntoPreviewSceneLoads a Prefab Asset at a given path into a given preview Scene and returns the root GameObject of the Prefab.
RecordPrefabInstancePropertyModificationsCauses modifications made to the Prefab instance to be recorded.
RevertAddedComponentRemoves this added component on a Prefab instance.
RevertAddedGameObjectRemoves this added GameObject from a Prefab instance.
RevertObjectOverrideReverts all overridden properties on a Prefab instance component or GameObject.
RevertPrefabInstanceReverts all overrides on a Prefab instance.
RevertPropertyOverrideRevert a single property override on a Prefab instance.
RevertRemovedComponentAdds this removed component back on the Prefab instance.
SaveAsPrefabAssetUse this function to create a Prefab Asset at the given path from the given GameObject, including any childen in the Scene without modifying the input objects.
SaveAsPrefabAssetAndConnectUse this function to create a Prefab Asset at the given path from the given GameObject including any children in the Scene and at the same time make the given GameObject into an instance of the new Prefab.
SavePrefabAssetUse this function to save the version of an existing Prefab Asset that exists in memory back to disk.
SetPropertyModificationsAssigns all modifications that are applied to the Prefab instance compared to the parent Prefab.
UnloadPrefabContentsReleases the content from a Prefab previously loaded with LoadPrefabContents from memory.
UnpackPrefabInstanceUnpacks a given Prefab instance so that it is replaced with the contents of the Prefab Asset while retaining all override values.
UnpackPrefabInstanceAndReturnNewOutermostRootsThis function will unpack the given Prefab instance using the behaviour specified by unpackMode.

Delegates

PrefabInstanceUpdatedDelegate for method that is called after Prefab instances in the Scene have been updated.