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

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 开发(五)编辑器的undo操作

相关文章:

你感兴趣的文章:

标签云: