PrefabUtility

class in UnityEditor

切换到手册

描述

可用于任何预制件相关操作的实用程序类。

//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); } }

静态变量

prefabInstanceUpdated在场景中的预制件实例完成更新后调用。

静态函数

ApplyAddedComponent将添加的组件应用于给定资源路径上的预制件资源。
ApplyAddedGameObject将添加的游戏对象应用于给定资源路径上的预制件资源。
ApplyObjectOverride将预制件实例组件或游戏对象上的所有重载属性应用于给定资源路径上的预制件资源。
ApplyPrefabInstance将预制件实例上的所有重载应用于其预制件资源。
ApplyPropertyOverride将预制件实例上的单个重载属性应用于给定资源路径上的预制件资源。
ApplyRemovedComponent从含有组件的预制件资源中,删除该组件。
GetAddedComponents返回 PrefabUtility.AddedComponent 对象的列表;这些对象包含预制件实例上添加的组件重载的信息。
GetAddedGameObjects返回 PrefabUtility.AddedGameObject 对象的列表;这些对象包含预制件实例上添加的游戏对象的信息。
GetCorrespondingObjectFromOriginalSource返回给定对象的原始对象。
GetCorrespondingObjectFromSource返回 source 的相应资源对象,如果找不到,则返回 null。
GetCorrespondingObjectFromSourceAtPath从给定的预制件资源路径,返回给定对象的相应对象。
GetIconForGameObject返回给定游戏对象的图标。
GetNearestPrefabInstanceRoot返回游戏对象(它是对象所属的最近预制件实例的根)。
GetObjectOverrides返回对象的列表,其中包含预制件实例上对象重载的相关信息。
GetOutermostPrefabInstanceRoot返回游戏对象(它是对象所属的最外层预制件实例的根)。
GetPrefabAssetPathOfNearestInstanceRoot返回指定对象所属的最近预制件实例根的资源路径。
GetPrefabAssetType枚举值,指示预制件资源类型(例如常规预制件、模型预制件和预制件变体)。
GetPrefabInstanceHandle此函数将为提供的对象所属的最外层预制件实例提供 PrefabInstance 对象。
GetPrefabInstanceStatus枚举值,其中包含有关预制件实例是否已正确连接到其资源的状态。
GetPropertyModifications提取应用于预制件实例的所有修改(与父预制件相比)。
GetRemovedComponents返回对象的列表,其中包含预制件实例上已删除组件的相关信息。
InstantiateAttachedAsset将预制件所引用的资源实例化,并在预制件实例上使用该资源。
InstantiatePrefab将给定场景中的给定预制件实例化。
IsAddedComponentOverride是否将该组件作为重载添加到预制件实例?
IsAddedGameObjectOverride是否将此游戏对象作为子代添加到预制件实例?
IsAnyPrefabInstanceRoot该游戏对象是任何预制件实例的根?
IsDefaultOverride如果将给定修改视为默认重载,则返回 true。
IsDisconnectedFromPrefabAsset如果给定对象是缺失 PrefabInstance 对象的实例的一部分,但是给定对象具有有效的相应对象,则返回 true。
IsOutermostPrefabInstanceRoot该游戏对象是预制件实例(不包括嵌套预制件)的根?
IsPartOfAnyPrefab如果给定对象是任何种类的预制件的一部分,则返回 true。
IsPartOfImmutablePrefab该对象是无法编辑的预制件的一部分?
IsPartOfModelPrefab如果给定对象是模型预制件资源或模型预制件实例的一部分,则返回 true。
IsPartOfNonAssetPrefabInstance如果给定对象是预制件实例的一部分而不是资源的一部分,则返回 true。
IsPartOfPrefabAsset如果给定对象是预制件资源的一部分,则返回 true。
IsPartOfPrefabInstance如果给定对象是预制件实例的一部分,则返回 true。
IsPartOfPrefabThatCanBeAppliedTo该对象是无法应用于的预制件的一部分?
IsPartOfRegularPrefab如果给定对象是常规预制件资源或预制件实例的一部分,则返回 true。
IsPartOfVariantPrefab如果给定对象是预制件变体资源或预制件变体实例的一部分,则返回 true。
IsPrefabAssetMissing如果给定对象是预制件实例的一部分,但是源资源缺失,则返回 true。
LoadPrefabContents将给定路径上的预制件资源加载到孤立场景中,并返回预制件的根游戏对象。
LoadPrefabContentsIntoPreviewScene将给定路径上的预制件资源加载到给定预览场景中,并返回预制件的根游戏对象。
RecordPrefabInstancePropertyModifications指示记录对预制件实例所做的修改。
RevertAddedComponent删除预制件实例上添加的此组件。
RevertAddedGameObject从预制件实例删除所添加的此游戏对象。
RevertObjectOverride还原预制件实例组件或游戏对象上的所有重载属性。
RevertPrefabInstance还原预制件实例上的所有重载。
RevertPropertyOverride还原预制件实例上的单属性重载。
RevertRemovedComponent将删除的该组件添加回预制件实例。
SaveAsPrefabAsset使用该函数,在给定路径上,从给定的游戏对象创建一个预制件资源(包括场景中的任何子项),而不修改输入对象。
SaveAsPrefabAssetAndConnect使用该函数,在给定路径上,从给定的游戏对象创建一个预制件资源(包括场景中的任何子项),同时让给定游戏对象进入新预制件的实例。
SavePrefabAsset使用此函数,将预制件作为源资源从 Library 文件夹写回 Assets 文件夹。
SetPropertyModifications指定应用于预制件实例的所有修改(与父预制件相比)。
UnloadPrefabContents从内存中释放以前随 LoadPrefabContents 加载的预制件的内容。
UnpackPrefabInstance将给定的预制件实例解压,以便将其替换为预制件资源的内容,同时保留所有重载值。
UnpackPrefabInstanceAndReturnNewOutermostRoots此函数将使用 unpackMode 指定的行为,对给定的预制件实例进行解压缩。

委托

PrefabInstanceUpdated在场景中的预制件实例完成更新后所调用的方法的委托。
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961