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

时间:2015-10-03 20:45:01   收藏:0   阅读:651


文章作者:松阳

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

原文链接:replaceMe







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();
        }
    }
};

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

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

评论(0
© 2014 bubuko.com 版权所有 - 联系我们:wmxa8@hotmail.com
打开技术之扣,分享程序人生!