Undo.RecordObject
Declaration
public static void RecordObject(Object objectToUndo, string name);Параметры
| Параметр | Описание |
|---|---|
| objectToUndo | Ссылка на объект, который будет изменяться. |
| имя | Название действия, которое будет отображаться в истории отмены (i.e. видно в меню отмены). |
Описание
Записывает любые изменения, произведенные в объекте после функции RecordObject.
Почти все изменения свойств могут быть зарегистрированы с помощью этой функции. AddComponent, уничтожение объекта не может быть зарегистрировано с этой функцией, для этого следует использовать выделенные функции.
Внутри при этом создаётся временная копия состояния объекта. В конце кадра Unity сравнивает состояния, и изменённые свойства записываются в стек отмены. Если ничего не изменилось (для всех свойств используется точное двоичное сравнение), в стеке не сохраняется ни одной операции отмены.
Важно: Для правильной обработки случаев, когда objectToUndo является экземпляром Префаб, PrefabUtility.RecordPrefabInstancePropertyModifications должен быть вызван после RecordObject.
Это пример скрипта редактора, который позволяет изменить радиус эффекта переменной. Состояние записывается для отмены, что позволяет откатить изменения через систему отмены.
//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; } } }
Поместите этот скрипт на GameObject, чтобы увидеть область эффекта, и измените значение с помощью гаджета в представлении Scene.
//Name this script "EffectRadius" using UnityEngine; using System.Collections;
public class EffectRadius : MonoBehaviour { public float areaOfEffect = 1; }
Дополнительные ресурсы: ,Undo.RecordObjects,.