主要是使用unity里的Undo的API。

1.Undo.RegisterCreatedObjectUndo //撤销创建

[MenuItem("Example/Create Cube")]static void CreateCube(){var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);Undo.RegisterCreatedObjectUndo(cube, "Create Cube");}

2.Undo.DestroyObjectImmediate //撤销对象销毁

[MenuItem("Example/UndoDestory")]static void UndoDestory(){GameObject player = Selection.activeGameObject;if (player){// Store the states of the player object.Undo.DestroyObjectImmediate(player);Object.DestroyImmediate(player);}}

3 Undo.RegisterCompleteObjectUndo //撤销Object的状态
能撤销object的各种公共字段的修改。
除了AddComponent,改变父子关系和销毁。

[MenuItem("Example/RegisterCompleteObjectUndo")]static void Example(){GameObject player = Selection.activeGameObject;if (player){// Store the states of the player object.Undo.RegisterCompleteObjectUndo(player, "Player name change");player.name = "New Player";}}

3.1 Undo.RegisterFullObjectHierarchyUndo //撤销Object及其子物体的状态

[MenuItem("Example/UndoFullObjectHierarchy")]static void UndoFullObjectHierarchy(){GameObject player = Selection.activeGameObject;if (player.transform.childCount > 0){Undo.RegisterFullObjectHierarchyUndo(player, "Player name change");player.transform.GetChild(0).name = "New Player";}}

3.2 Undo.RecordObject //也是记录当前该对象状态用于撤销
使用方法类似RegisterCompleteObjectUndo ,暂时没发现啥不同。

[MenuItem("Example/UndoRecordObject")]static void UndoRecordObject(){var obj = Selection.activeGameObject;if (obj){Undo.RecordObject(obj,"test");obj.name = "Changed";}}

4 Undo.AddComponent //向参数对象添加相应组件并支持撤销
注意执行该代码就会给该对象加一个组件

[MenuItem("Example/UndoAddComponent")]static void UndoAddComponent(){GameObject player = Selection.activeGameObject;if (player){Undo.AddComponent<test>(player);}}

4 Undo.SetTransformParent(t1,t2,name) //将t1作为t2的子物体,并支持撤销
注意执行该代码就会执行相应的父子关系变换

[MenuItem("Example/UndoTransform")]static void UndoTransParent(){Transform root = GameObject.Find("Main Camera").transform;Transform transform = Selection.activeTransform;Undo.SetTransformParent(transform, root, "摄像机子物体");}

5.将撤销操作分组
如果在一段操作里注册复数个撤销,在实际撤销时,这些撤销会作为一个组一起被撤销。如果想要阶段性撤销。就要对撤销操作分组。
//会被统一撤销掉

     var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);Undo.RegisterCreatedObjectUndo(cube, "Create");var sp = GameObject.CreatePrimitive(PrimitiveType.Sphere);Undo.RegisterCreatedObjectUndo(sp, "Create sp");

//会被分为两个撤销

     var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);Undo.RegisterCreatedObjectUndo(cube, "Create");Undo.IncrementCurrentGroup();//组ID累加1,即这之后的撤销为另一组var sp = GameObject.CreatePrimitive(PrimitiveType.Sphere);Undo.RegisterCreatedObjectUndo(sp, "Create sp");

Undo.GetCurrentGroup() //获取当前组ID
Undo.IncrementCurrentGroup();//增加撤销分组
Undo.RevertAllDownToGroup(int group);//执行该组id下所有撤销操作
Undo.RevertAllInCurrentGroup();//执行当前组下所有撤销操作
Undo.CollapseUndoOperations(int groupid);//将所有的撤销操作折叠到groupid里,就是groupid之后的撤销分组失效,撤销操作都折叠到groupid里。

var cube = GameObject.CreatePrimitive(PrimitiveType.Cube);Undo.RegisterCreatedObjectUndo(cube, "Create");var id = Undo.GetCurrentGroup();//试着移动这个Undo.IncrementCurrentGroup();var sp = GameObject.CreatePrimitive(PrimitiveType.Sphere);Undo.RegisterCreatedObjectUndo(sp, "Create sp");Undo.IncrementCurrentGroup();var cap = GameObject.CreatePrimitive(PrimitiveType.Capsule);Undo.RegisterCreatedObjectUndo(cap, "Create cap");Undo.CollapseUndoOperations(id);

参考
Undo
unityAPI

unity editor里的undo操作相关推荐

  1. Unity开发数字孪生编辑器操作与Undo设计

    Undo的程序设计基于以下想法: 一.所有对象从根本上来讲都是以由基本的数据类型组成的,包括int.float.bool.string等等. 二.undo从根本上是将上述基本类型的值设置回操作之前的值 ...

  2. Unity教程之-制作闪亮的星星Star(三):给Star创建Unity Editor编辑器

    继续上篇文章<Unity教程之-制作闪亮的星星Star(二):创建Shader>,本篇我们来讲解 unity star editor的创建! 建立编辑器 Creating the Insp ...

  3. 进化Unity Editor UX

    A new design signifies the first step towards improving the user experience (UX) for an ever-evolvin ...

  4. Unity Editor 基础篇(四):Handles

    本文参自: 克森http://mp.weixin.qq.com/s/qxsKDPjJS30S9OXeQ8WKTw 本文为本人学习上链接的笔记微有改动,请点击以上链接查看原文,尊重楼主知识产权. Uni ...

  5. Unity editor 快速上手 quick start

    Unity editor 快速上手 quick start Warning:非干货,是比较个人向的快速上手的代码例子,不一定是最好的方法,但能work. 主要目的是做一个可以动态添加和移除新的行的自定 ...

  6. Unity Editor已停止工作

    在更换系统之后,可能会出现打开刚安装好的Unity,显示Unity Editor已停止工作,这时候我们考虑是系统win7的问题.可以在原系统上升级,也可以重新安装,升级.文中所涉及到的软件,可在右侧加 ...

  7. Git undo 操作

    相比传统的版本管理工具,git 的 undo 操作也不是很简单明了,本文尝试总结常用的 undo 操作. 重新提交 应该避免考虑不周全的提交,但这太难了.因此Git 专门提供了一个命令来弥补粗心的提交 ...

  8. html表单中动态添加下拉框,antd Select下拉菜单动态添加option里的内容操作

    antd Select下拉菜单动态添加option里的内容,通过form表单绑定select选中的值 提供一个公共的方法,每次只需去调用这个方法就行了 //这里是示例数据格式 let giftScop ...

  9. Unity Editor Built-in Icons (Unity version: 2018.3.0f2)

    Unity Editor Built-in Icons Unity version: 2018.3.0f2 Icons what can load using EditorGUIUtility.Ico ...

最新文章

  1. 美多商城之支付(支付宝介绍)
  2. 亿级商城促销系统架构设计与实践
  3. LodRunner实现大负载测试的四部曲(配置系统参数、配置LR、修改脚本、设置组策略)...
  4. 数字对 (长乐一中模拟赛day2T2)
  5. 项目启动时socket自动启动_spring boot 项目在启动时调用接口
  6. 计算机的优势和劣势_100亿倍,中国量子计算机完胜美国,向中方科学家致敬
  7. 道哥自述:为什么弹性安全网络将诞生最大的人工智能?
  8. [C++11]不允许使用auto的四个场景
  9. 【GoWeb开发实战】Beego的路由控制
  10. Linux学习笔记-消息队列的接收
  11. Fragment真正的完全解析(上)
  12. py 的 第 12 天
  13. 阶段2 JavaWeb+黑马旅游网_15-Maven基础_第4节 maven生命周期和概念模型图_09maven概念模型图...
  14. XShell rz、sz命令
  15. 干货 | 硬件设计基础60问
  16. UniApp video 使用
  17. 3月下旬到5月中旬之前采制的茶叶
  18. python对淘宝运营有帮助吗_干货分享 | 两年的淘宝运营经验
  19. 鸟哥的Linux私房菜基础学习篇 第5章的重点探索
  20. 地平线与比亚迪加速智能汽车量产;波士顿科学向成都企业转移技术;摩贝与伊利签署合作协议 | 美通企业周刊...

热门文章

  1. 静态构造函数和静态成员变量初始化的调用时间
  2. oracle老报604和10275,翻出来了 老东西了 , oracle 数据库解析 extent 数据结构解析...
  3. 用Linux同时编辑两个文档,如何使用Vim编辑多个文件
  4. python从入门到_Python学习路线从入门到上手,如何快速Python学习?
  5. TCP 三次握手和四次挥手个人理解
  6. arcengine 图层中节点抽稀功能(c++)
  7. 拓扑检查中的一些问题(为啥没自相交)
  8. MATLAB Tick的方向(刻度标外翻)
  9. MessagePack简介及使用:一种有效的二进制序列化格式
  10. PyCUDA Documentation