PrefabUtility.RecordPrefabInstancePropertyModifications

Switch to Manual
public static void RecordPrefabInstancePropertyModifications (Object targetObject);

Parameters

targetObject要处理的对象。

Description

指示记录对预制件实例所做的修改。

Note that the recommended method of enabling instances of Prefabs to record changes is to use SerializedProperty and SerializedObject. This enables instances to record changes and automatically includes changes in the undo system.

在对预制件的实例进行修改后调用此方法,以记录该实例的这些更改。如果不调用此方法,对实例所做的更改就会丢失。请注意,如果您不使用 SerializedProperty/SerializedObject,那么无论您是否调用此方法,对对象所做的更改都不会记录在撤消系统中。

另请参阅:SerializedObject SerializedProperty

using UnityEngine;
using UnityEditor;
using UnityEditor.SceneManagement;
using UnityEngine.SceneManagement;

// The following Editor script looks for an existing instance of the TheCube Prefab, records the property // modification and marks the Scene as dirty so that the user can save the Scene afterwards and keep // the changes. public class Example : MonoBehaviour { [MenuItem("TestPrefab/ModifyAndSaveInstance")] static void ModifyCubeInstanceAndSave() { GameObject cubeInstance = GameObject.Find("TheCube01"); Undo.RecordObject(cubeInstance.transform, "Change scale"); cubeInstance.transform.localScale = new Vector3(2, 2, 2);

// Notice that if the call to RecordPrefabInstancePropertyModifications is not present, // all changes to scale will be lost when saving the Scene, and reopening the Scene // would revert the scale back to its previous value. PrefabUtility.RecordPrefabInstancePropertyModifications(cubeInstance.transform);

// Optional step in order to save the Scene changes permanently. EditorSceneManager.SaveScene(SceneManager.GetActiveScene()); } }