Unity3d 开发(五)编辑器的undo操作


文章作者:松阳

本文出自 阿修罗道,禁止用于商业用途,转载请注明出处。  

原文链接:http://blog.csdn.net/fansongy/article/details/48880345






Undo

在Unity3d编辑器扩展中,常常需要兼容Undo的操作即:Cmd/Ctrl + z。在Unity3d对应的接口Undo.RecordObjects可以完成这项工作。

封装

由于它的参数需要我们操作对象的组件,我为他封装了一个操作类。通过托管的方式调用。

实现

实现函数如下:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEditor;

/*
Usage:
  var go = Selection.activeTransform;
  UndoOperate bc = new UndoOperate("batch Operate");
  bc.Add(go,()=>{
    go.localPosition = new Vector3(1,2,1);
    go.localScale = new Vector3(1,2,1);
  });

  var comp = go.GetComponent<Test>();
  bc.Add(comp,()=>{
    comp.str= "Hello SongYang";
  });
  bc.Flush();
*/

public class UndoOperate {
    public delegate void Callback();
    List<Object> targetList = new List<Object>();
    List<Callback> callList = new List<Callback>();
    string m_name;
    
    public UndoOperate(string name) {
        m_name = name;
    }
    
    public void Add(Object obj,Callback call) {
        targetList.Add(obj);
        callList.Add(call);
    }
    
    public void Flush() {
        Undo.RecordObjects(targetList.ToArray(),m_name);
        foreach(var each in callList) {
            each();
        }
    }
};

如果你觉得这篇文章对你有帮助,可以顺手点个,不但不会喜当爹,还能让更多人能看到它... 

你可能感兴趣的:(开发,插件,unity3d,编辑器)