objectToUndo | 对要修改对象的引用。 |
name | 要在撤消历史记录中显示(即在撤销菜单中可见)的操作的名称。 |
记录执行 RecordObject 函数之后对对象所做的任何更改。
使用这一函数可以记录几乎所有属性更改。无法使用这一函数记录变换组件的父项、AddComponent 和对象销毁,应该使用专用函数来记录。
在内部,这会创建对象状态的临时副本。在帧结束时,Unity 会对状态进行区分并检测已更改的内容。更改过的属性会记录在撤销堆栈上。如果未进行任何更改(对所有属性都进行二进制精确比较),则不会在堆栈上存储任何撤销操作。
**重要信息:**要在 objectToUndo 为预制件实例的情况下正确处理实例,必须在 RecordObject 之后调用 PrefabUtility.RecordPrefabInstancePropertyModifications。
下面是一个编辑器脚本的示例,可用于更改特效的半径变量。系统会记录撤销状态,这样您就可以使用撤销系统来恢复更改。
//Name this script "EffectRadiusEditor" using UnityEngine; using UnityEditor;
[CustomEditor(typeof(EffectRadius))] public class EffectRadiusEditor : Editor { public void OnSceneGUI() { EffectRadius t = (target as EffectRadius);
// The Begin and EndChangeChecks check for changes in the GUI state. This is not required for // Undo.RecordObject. Undo.RecordObject only registers changes to the target // after the call to Undo.RecordObject. EditorGUI.BeginChangeCheck(); float areaOfEffect = Handles.RadiusHandle(Quaternion.identity, t.transform.position, t.areaOfEffect); if (EditorGUI.EndChangeCheck()) { Undo.RecordObject(target, "Changed Area Of Effect"); t.areaOfEffect = areaOfEffect; } } }
将以下脚本放在游戏对象上,查看效果范围句柄,并在 Scene 视图中使用辅助图标来更改相应值。
//Name this script "EffectRadius" using UnityEngine; using System.Collections;
public class EffectRadius : MonoBehaviour { public float areaOfEffect = 1; }
Additional resources: Undo.RecordObjects.