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

Undo.RecordObject

建议更改

成功!

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

关闭

提交失败

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

关闭

取消

声明

public static void RecordObject(Object objectToUndo, string name);

参数

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