Unity 6.3
0 онлайн 13 гостей 3 в системе
Вход

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,.