obsidian/笔记文件/2.笔记/Unity 编辑器扩展精粹_第三章.md
2025-03-26 00:02:56 +08:00

4.2 KiB
Raw Blame History

快捷键设置

!Pasted image 20240319165535.png

表现

!Pasted image 20240319165602.png

一键重启项目,也是调用编辑器内部接口即可; EditorApplication.OpenProject

!Pasted image 20240319170304.png

入口

!Pasted image 20240319170348.png

重启项目,或者每次打开项目,都会有这个打印

!Pasted image 20240319170507.png

也是因为脚本之前加了DidReloadScripts标签的每次编译完都会调用这个函数回调无影响

!Pasted image 20240319170540.png

使用编辑器ui实现复杂系统

!Pasted image 20240319170815.png

入口和最终表现

!Pasted image 20240321105245.png

!Pasted image 20240321105306.png

这是入口的逻辑

!Pasted image 20240319171719.png

入口

!Pasted image 20240319172056.png

父类接口继承自编辑器窗体EditorWindow和 IDisposable资源释放相关 参考IDisposable模式用法详解

!Pasted image 20240319172136.png

打开窗体Open函数如果没有打开窗体就调用初始化然后Show显示出来 如果已经打开就调用Dispose释放资源关闭窗体即可

!Pasted image 20240319172617.png

这是框架界面显示的基类接口IView也是继承自IDisposable自己控制资源释放相关 以下是包含的各函数接口

!Pasted image 20240319173056.png

!Pasted image 20240319173159.png

这是layout布局的总接口继承自IView 有添加、移除各个子物体的函数接口

!Pasted image 20240319173232.png

回到窗体基函数有一个Action委托队列mCommands还有一个PushCommand函数是塞Action到队列里

!Pasted image 20240319173524.png

新增一个额外的静态工具类是用来调用添加Action的

!Pasted image 20240320104629.png

添加一个事件系统EventDispatcher通过字典mRegisteredEvents存储Action事件通过Register方法把key强转int32添加到事件字典

!Pasted image 20240320104853.png

移除事件,有两种形式,一种只是移除,事件队列里面,某个单一事件; 另一种,是移除全部事件;

!Pasted image 20240320105234.png

Send触发事件

!Pasted image 20240320105316.png

View界面类继承自多IView界面基类 创建一个抽象类EventRecord是作为一个界面的事件容器记录包含Key和Action队列mEventRecords是该事件容器的队列 RegisterEvent方法是将事件添加到事件系统统一管理再添加到界面类对应的队列容器进行存储

!Pasted image 20240320105534.png

UnRegisterAll是取消注册全部的函数SendEvent发送触发事件函数暂时没使用到因为事件系统EventDispatcher本身自带一个Send触发事件函数还有各种样式

!Pasted image 20240320114112.png

帧更新函数RefreshNextFrame会调用PushCommand方法去添加AddLayoutOption是添加布局样式相关

!Pasted image 20240320114309.png

渲染前的处理,是样式的赋值

!Pasted image 20240320115309.png

渲染调用渲染前的函数然后设置一下颜色调用OnGUI即可

!Pasted image 20240320115330.png

!Pasted image 20240320115407.png

父类布局,还有从父类布局中,移除的相关逻辑

!Pasted image 20240320115445.png

调用的是这个

!Pasted image 20240320115556.png

创建一个布局额外工具类,包含的静态工具函数,是往父类布局,添加界面

!Pasted image 20240320115611.png

自定义资源释放

!Pasted image 20240320115655.png

Layout布局是继承自View和ILayout布局基类的有弄一个Children列表容器存放IView界面 添加子物体,也是配合该容器,进行即可; 设置一下,子物体的布局父类,是自身;

!Pasted image 20240320115919.png

移除子物体的逻辑就是移除布局然后调用子物体的Dispose释放资源函数 重写的更新函数也是Foreach遍历调用子物体然后调用它们的Refresh函数即可

!Pasted image 20240320120118.png

布局的OnGUI渲染有前后两个函数处理中间包裹着调用子物体的DrawGUI绘制函数

!Pasted image 20240320120425.png