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; } } }
将此脚本放置在游戏对象上以查看效果区域句柄,并使用场景视图中的 Gizmo 更改值。
//Name this script "EffectRadius" using UnityEngine; using System.Collections;
public class EffectRadius : MonoBehaviour { public float areaOfEffect = 1; }
其他资源:Undo.RecordObjects。