Undo.RecordObject

切换到手册
public static void RecordObject (Object objectToUndo, string name);

参数

objectToUndo对要修改对象的引用。
name要在撤消历史记录中显示(即在撤销菜单中可见)的操作的名称。

描述

记录执行 RecordObject 函数之后对对象所做的任何更改。

使用这一函数可以记录几乎所有属性更改。无法使用这一函数记录变换组件的父项、AddComponent 和对象销毁,应该使用专用函数来记录。

这一操作将在内部创建一份临时的对象状态,并且,Unity 会在帧的末尾对状态加以区分,从而检测实际进行了哪些更改。更改过的属性随后会记录在撤销堆栈上。如果实际上未进行任何更改(对所有属性都进行二进制精确比较),则不会在堆栈上存储任何撤销操作。

下面是一个编辑器脚本的示例,可用于更改特效的半径变量。系统会记录撤销状态,这样您就可以使用撤销系统来恢复更改。

//Name this script "EffectRadiusEditor"
using UnityEngine;
using UnityEditor;

[CustomEditor(typeof(EffectRadius))] public class EffectRadiusEditor : Editor { public void OnSceneGUI() { EffectRadius t = (target as EffectRadius);

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

将以下脚本放在游戏对象上,查看效果范围句柄,并在场景视图中使用辅助图标来更改相应值。

//Name this script "EffectRadius"
using UnityEngine;
using System.Collections;

public class EffectRadius : MonoBehaviour { public float areaOfEffect = 1; }