"撤消"在自定义编辑器中编辑对象后

时间:2014-06-08 04:59:30

标签: unity3d

我已经制作了一个自定义编辑器(扩展了EditorWindow)。该编辑器允许编辑选定的对象。

问题是,在我按下编辑器面板上的按钮后,按 CTRL / CMD + Z 什么都不做,它&#39在历史上没有追踪过。

是否有一些命令可以跟踪从自定义编辑器面板中触发的操作?

1 个答案:

答案 0 :(得分:3)

您可以这样做,但由于Unity不会自动跟踪脚本修改的对象,因此您必须通知编辑器要记录的对象。对于所有序列化属性,您可以依赖Unity的撤销系统。

步骤如下:

  1. 在修改对象之前使用Undo.RecordObject跟踪对象
  2. 修改对象的序列化属性
  3. 使用EditorUtility.SetDirty将对象标记为已修改
  4. 这是一个简单的例子:

    public class TestWindow : EditorWindow {
    
        static Transform anObjTransform;
        void OnGUI() 
        {
    
            anObjTransform = EditorGUILayout.ObjectField ("selected object", anObjTransform, typeof(Transform), true) as Transform;
    
            if (anObjTransform != null && GUILayout.Button("MOVE RIGHT"))
            {
                Undo.RecordObject(anObjTransform, "move");
                anObjTransform.Translate(anObjTransform.right * 10f);
    
                EditorUtility.SetDirty(anObjTransform);
            }
        }
        [MenuItem ("Test/Test Window")]
        private static void Init () {
            EditorWindow.GetWindow<TestWindow> ();
    
        }
    }