Version: 2022.3
LanguageEnglish
  • C#

PrefabUtility

class in UnityEditor

Suggest a change

Success!

Thank you for helping us improve the quality of Unity Documentation. Although we cannot accept all submissions, we do read each suggested change from our users and will make updates where applicable.

Close

Submission failed

For some reason your suggested change could not be submitted. Please <a>try again</a> in a few minutes. And thank you for taking the time to help us improve the quality of Unity Documentation.

Close

Cancel

Description

Utility class for any Prefab related operations.

// This script creates a new menu item Examples>Create Prefab in the main menu.
// Use it to create Prefab(s) from the selected GameObject(s).
// It is placed in the root Assets folder.
using System.IO;
using UnityEngine;
using UnityEditor;

public class Example { // Creates a new menu item 'Examples > Create Prefab' in the main menu. [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) { // Create folder Prefabs and set the path as within the Prefabs folder, // and name it as the GameObject's name with the .Prefab format if (!Directory.Exists("Assets/Prefabs")) AssetDatabase.CreateFolder("Assets", "Prefabs"); string localPath = "Assets/Prefabs/" + gameObject.name + ".prefab";

// Make sure the file name is unique, in case an existing Prefab has the same name. localPath = AssetDatabase.GenerateUniqueAssetPath(localPath);

// Create the new Prefab and log whether Prefab was saved successfully. bool prefabSuccess; PrefabUtility.SaveAsPrefabAssetAndConnect(gameObject, localPath, InteractionMode.UserAction, out prefabSuccess); if (prefabSuccess == true) Debug.Log("Prefab was saved successfully"); else Debug.Log("Prefab failed to save" + prefabSuccess); } }

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

Static Properties

prefabInstanceUpdatedUnity calls this method automatically when Prefab instances in the Scene have been updated.

Static Methods

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.
ApplyAddedGameObjectsApplies the added GameObjects 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.
ApplyPrefabInstancesApplies all overrides from a list of Prefab instances to their Prefab Assets.
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.
ApplyRemovedGameObjectRemoves the GameObject from the source Prefab Asset.
ConvertToPrefabInstanceConvert the plain GameObject to a Prefab instance using the provided Prefab Asset root object.
ConvertToPrefabInstancesConvert an array of GameObjects to Prefab instances of the given Prefab Asset.
FindAllInstancesOfPrefabRetrieves the root GameObjects for all instances of the Prefab asset with root prefabRoot found in all currently loaded scenes. If prefabRoot is not a valid Prefab asset root GameObject, an ArgumentException is thrown.
GetAddedComponentsRetrieves a list of PrefabUtility.AddedComponent objects which contain information about added component overrides on the Prefab instance.
GetAddedGameObjectsRetrieves a list of PrefabUtility.AddedGameObject objects which contain information about added GameObjects on the Prefab instance.
GetCorrespondingObjectFromOriginalSourceRetrieves the object of origin for the given object.
GetCorrespondingObjectFromSourceRetrieves the corresponding asset object of source, or null if it can't be found.
GetCorrespondingObjectFromSourceAtPathRetrieves the corresponding object of the given object from a given Prefab Asset path.
GetIconForGameObjectRetrieves the icon for the given GameObject.
GetNearestPrefabInstanceRootRetrieves the GameObject that is the root of the nearest Prefab instance the object is part of.
GetObjectOverridesRetrieves a list of objects with information about object overrides on the Prefab instance.
GetOriginalSourceRootWhereGameObjectIsAddedUse this method to find the Prefab Asset root where a Prefab instance or Prefab Asset object was added originally.
GetOutermostPrefabInstanceRootRetrieves the GameObject that is the root of the outermost Prefab instance the object is part of.
GetPrefabAssetPathOfNearestInstanceRootRetrieves the asset path of the nearest Prefab instance root the specified object is part of.
GetPrefabAssetTypeRetrieves an enum value indicating the type of Prefab Asset, such as Regular Prefab, Model Prefab and Prefab Variant.
GetPrefabInstanceHandleRetrieves the PrefabInstance object for the outermost Prefab instance the provided object is part of.
GetPrefabInstanceStatusDetermines whether a Prefab instance is properly connected to its asset.
GetPropertyModificationsExtracts 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.
GetRemovedGameObjectsReturns a list of objects with information about removed GameObject overrides on the Prefab instance.
HasManagedReferencesWithMissingTypesDetermines whether the object Prefab asset contains any MonoBehaviours with missing SerializeReference types.
HasPrefabInstanceAnyOverridesReturns true if the given Prefab instance has any overrides.
InstantiatePrefabInstantiates the given Prefab in a given Scene.
IsAddedComponentOverrideReturns true if the given component is added to a Prefab instance as an override.
IsAddedGameObjectOverrideReturns true if the given GameObject is 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.
IsOutermostPrefabInstanceRootReturns true if the given GameObject is an outermost Prefab instance root.
IsPartOfAnyPrefabReturns true if the given object is part of a Prefab Asset or Prefab instance.
IsPartOfImmutablePrefabReturns true if the given object is 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 that is not part of a Prefab 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.
IsPartOfPrefabThatCanBeAppliedToReturns true if the given object is part of a Prefab to which overrides can 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.
MergePrefabInstanceForces a Prefab instance to merge with changes from the Prefab Asset.
RecordPrefabInstancePropertyModificationsCauses modifications made to the Prefab instance to be recorded.
ReplacePrefabAssetOfPrefabInstanceReplace the Prefab Asset for a Prefab instance that exists in a Scene or for a nested Prefab instance inside another Prefab.
ReplacePrefabAssetOfPrefabInstancesReplace the Prefab Asset for an array of Prefab instances that exists in Scenes or for nested Prefab instances inside another Prefab.
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.
RevertPropertyOverrideReverts a single property override on a Prefab instance.
RevertRemovedComponentAdds this removed component back on the Prefab instance.
RevertRemovedGameObjectAdds this removed GameObject back on the Prefab instance.
SaveAsPrefabAssetCreates a Prefab Asset at the given path from the given GameObject, including any childen in the Scene without modifying the input objects.
SaveAsPrefabAssetAndConnectCreates 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.
SavePrefabAssetSaves 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.
UnpackAllInstancesOfPrefabUnpacks all instances of a given Prefab Asset root GameObject in all open scenes so that all instances are replaced with the contents of the Prefab Asset while retaining all override values.
UnpackPrefabInstanceUnpacks a given Prefab instance so that it is replaced with the contents of the Prefab Asset while retaining all override values.
UnpackPrefabInstanceAndReturnNewOutermostRootsUnpacks the given Prefab instance using the behaviour specified by unpackMode.

Events

prefabInstanceRevertedUnity calls this method automatically after a Prefab instance has been reverted.
prefabInstanceRevertingUnity calls this method automatically before a Prefab instance is reverted.
prefabInstanceUnpackedUnity calls this method automatically after a Prefab instance is unpacked.
prefabInstanceUnpackingUnity calls this method automatically before a Prefab instance is unpacked.

Delegates

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