Unity 编辑器扩展精粹_第三章.md 4.2 KB

快捷键设置

![[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]]