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

来源:互联网 发布:linux setfacl 编辑:程序博客网 时间:2024/05/18 02:24
div#cpmenu {height:200px;float:left;}div#cpcontent {height:200px;width:150px;float:left;}


文章作者:松阳

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

原文链接: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();        }    }};

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

3 1
原创粉丝点击