版本: Unity 6 (6000.0)
语言English
  • C#

PrefabUtility

UnityEditor 中的类

建议更改

成功!

感谢您帮助我们提高 Unity 文档的质量。虽然我们无法接受所有提交,但我们确实会阅读用户提出的每个建议更改,并在适用的情况下进行更新。

关闭

提交失败

由于某些原因,您的建议更改无法提交。请在几分钟后<a>重试</a>。感谢您抽出时间帮助我们提高 Unity 文档的质量。

关闭

取消

描述

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

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

静态属性

prefabInstanceUpdated当场景中的预制体实例更新时,Unity 会自动调用此方法。

静态方法

ApplyAddedComponent将添加的组件应用于给定资源路径处的预制体资源。
ApplyAddedGameObject将添加的 GameObject 应用于给定资源路径处的预制体资源。
ApplyAddedGameObjects将添加的 GameObjects 应用于给定资源路径处的预制体资源。
ApplyObjectOverride将预制体实例组件或 GameObject 上的所有覆盖属性应用于给定资源路径处的预制体资源。
ApplyPrefabInstance将预制体实例上的所有覆盖应用于其预制体资源。
ApplyPrefabInstances将预制体实例列表中的所有覆盖应用于其预制体资源。
ApplyPropertyOverride将预制体实例上的单个覆盖属性应用于给定资源路径处的预制体资源。
ApplyRemovedComponent从具有该组件的预制体资源中删除该组件。
ApplyRemovedGameObject从源预制体资源中删除该 GameObject。
ConvertToPrefabInstance使用提供的预制体资源根对象将普通 GameObject 转换为预制体实例。
ConvertToPrefabInstances将 GameObject 数组转换为给定预制体资源的预制体实例。
FindAllInstancesOfPrefab检索所有已加载场景中找到的具有根预制体 prefabRoot 的预制体资源的所有实例的根 GameObject。如果 prefabRoot 不是有效的预制体资源根 GameObject,则会引发 ArgumentException。
GetAddedComponents检索 PrefabUtility.AddedComponent 对象列表,这些对象包含有关预制体实例上添加的组件覆盖的信息。
GetAddedGameObjects检索 PrefabUtility.AddedGameObject 对象列表,这些对象包含有关预制体实例上添加的 GameObjects 的信息。
GetCorrespondingObjectFromOriginalSource检索给定对象的原始对象。
GetCorrespondingObjectFromSource检索源的对应资源对象,如果找不到则返回 null。
GetCorrespondingObjectFromSourceAtPath从给定的预制体资源路径检索给定对象的对应对象。
GetIconForGameObject检索给定 GameObject 的图标。
GetNearestPrefabInstanceRoot检索对象所属的最近预制体实例的根 GameObject。
GetObjectOverrides检索包含有关预制体实例上对象覆盖的信息的对象列表。
GetOriginalSourceRootWhereGameObjectIsAdded使用此方法查找最初添加预制体实例或预制体资源对象的预制体资源根。
GetOutermostPrefabInstanceRoot检索对象所属的最外层预制体实例的根 GameObject。
GetPrefabAssetPathOfNearestInstanceRoot检索指定对象所属的最近预制体实例根的资源路径。
GetPrefabAssetType检索一个枚举值,指示预制体资源的类型,例如常规预制体、模型预制体和预制体变体。
GetPrefabInstanceHandle检索提供的对象所属的最外层预制体实例的 PrefabInstance 对象。
GetPrefabInstanceStatus确定预制体实例是否正确连接到其资源。
GetPropertyModifications返回已应用于场景中特定预制体实例的所有修改,或资源中预制体实例的修改。有关返回的 PropertyModification 对象的字段的详细信息,请参阅 SetPropertyModifications。获取预制体实例属性覆盖信息的另一种方法是使用 GetObjectOverrides API,该 API 还具有应用和恢复功能。使用 GetPropertyModifications 时请记住:它将返回默认和非默认覆盖它可以返回所有子 GameObject 及其组件的覆盖它可以返回不再有效的覆盖。
GetRemovedComponents返回包含有关预制体实例上删除的组件覆盖的信息的对象列表。
GetRemovedGameObjects返回包含有关预制体实例上删除的 GameObject 覆盖的信息的对象列表。
HasManagedReferencesWithMissingTypes确定对象预制体资源是否包含任何具有丢失的 SerializeReference 类型的 MonoBehaviour。
HasPrefabInstanceAnyOverrides如果给定的预制体实例有任何覆盖,则返回 true。
InstantiatePrefab在给定的场景中实例化给定的预制体。
IsAddedComponentOverride如果给定的组件作为覆盖添加到预制体实例中,则返回 true。
IsAddedGameObjectOverride如果给定的 GameObject 作为子项添加到预制体实例中作为覆盖,则返回 true。
IsAnyPrefabInstanceRootGameObject 是否是任何预制体实例的根?
IsDefaultOverride如果给定的修改被视为默认覆盖,则返回 true。
IsOutermostPrefabInstanceRoot如果给定的 GameObject 是最外层预制体实例根,则返回 true。
IsPartOfAnyPrefab如果给定的对象是预制体资源或预制体实例的一部分,则返回 true。
IsPartOfImmutablePrefab如果给定的对象是无法编辑的预制体的一部分,则返回 true。
IsPartOfModelPrefab如果给定的对象是模型预制体资源或模型预制体实例的一部分,则返回 true。
IsPartOfNonAssetPrefabInstance如果给定的对象是预制体实例的一部分,但不是预制体资源的一部分,则返回 true。
IsPartOfPrefabAsset如果给定的对象是预制体资源的一部分,则返回 true。
IsPartOfPrefabInstance如果给定的对象是预制体实例的一部分,则返回 true。
IsPartOfPrefabThatCanBeAppliedTo如果给定的对象是预制体的一部分,并且可以将覆盖应用于该预制体,则返回 true。
IsPartOfRegularPrefab如果给定的对象是常规预制体实例或预制体资源的一部分,则返回 true。
IsPartOfVariantPrefab如果给定的对象是预制体变体资源或预制体变体实例的一部分,则返回 true。
IsPrefabAssetMissing如果给定的对象是预制体实例的一部分,但源资源丢失,则返回 true。
LoadPrefabContents将给定路径处的预制体资源加载到隔离的场景中,并返回预制体的根 GameObject。
LoadPrefabContentsIntoPreviewScene将给定路径处的预制体资源加载到给定的预览场景中,并返回预制体的根 GameObject。
MergePrefabInstance强制预制体实例与来自预制体资源的更改合并。
RecordPrefabInstancePropertyModifications导致对预制体实例所做的修改被记录。
RemoveUnusedOverrides此方法识别并删除预制体实例根列表中所有未使用的覆盖。有关更多详细信息,请参阅手册“未使用的覆盖”。
ReplacePrefabAssetOfPrefabInstance替换存在于场景中的预制体实例的预制体资源,或替换另一个预制体内的嵌套预制体实例的预制体资源。
ReplacePrefabAssetOfPrefabInstances替换存在于场景中的预制体实例数组的预制体资源,或替换另一个预制体内的嵌套预制体实例的预制体资源。
RevertAddedComponent删除预制体实例上添加的此组件。
RevertAddedGameObject从预制体实例中删除此添加的 GameObject。
RevertObjectOverride恢复预制体实例组件或 GameObject 上的所有覆盖属性。
RevertPrefabInstance恢复预制体实例上的所有覆盖。
RevertPropertyOverride恢复预制体实例上的单个属性覆盖。
RevertRemovedComponent将删除的此组件添加回预制体实例。
RevertRemovedGameObject将删除的此 GameObject 添加回预制体实例。
SaveAsPrefabAsset从给定的 GameObject 创建给定路径处的预制体资源,包括场景中的任何子项,而无需修改输入对象。
SaveAsPrefabAssetAndConnect从给定的 GameObject 创建给定路径处的预制体资源,包括场景中的任何子项,并同时使给定的 GameObject 成为新预制体的实例。
SavePrefabAsset将内存中存在的现有预制体资源的版本保存回磁盘。
SetPropertyModifications将一组 PropertyModification 对象分配给相对于其源预制体资源的目标预制体实例。
UnloadPrefabContents从内存中释放先前使用 LoadPrefabContents 加载的预制体的內容。
UnpackAllInstancesOfPrefab解包所有打开场景中给定预制体资源根 GameObject 的所有实例,以便所有实例都被预制体资源的内容替换,同时保留所有覆盖值。
UnpackPrefabInstance解包给定的预制体实例,以便它被预制体资源的内容替换,同时保留所有覆盖值。
UnpackPrefabInstanceAndReturnNewOutermostRoots使用 unpackMode 指定的行为解包给定的预制体实例。

事件

prefabInstanceApplied预制体实例应用后,Unity 会自动调用此方法。
prefabInstanceApplying应用预制体实例之前,Unity 会自动调用此方法。
prefabInstanceReverted预制体实例恢复后,Unity 会自动调用此方法。
prefabInstanceReverting恢复预制体实例之前,Unity 会自动调用此方法。
prefabInstanceUnpacked预制体实例解包后,Unity 会自动调用此方法。
prefabInstanceUnpacking预制体实例解包之前,Unity 会自动调用此方法。

委托

PrefabInstanceUpdated场景中的预制体实例更新后调用的方法的委托。