Unity编辑器扩展精粹_第三章
快捷键设置
表现
一键重启项目,也是调用编辑器内部接口即可; EditorApplication.OpenProject
入口
重启项目,或者每次打开项目,都会有这个打印
也是因为脚本,之前加了DidReloadScripts标签的,每次编译完,都会调用,这个函数回调,无影响;
使用编辑器ui,实现复杂系统
入口和最终表现
这是入口的逻辑
入口
父类接口,继承自编辑器窗体EditorWindow和 IDisposable,资源释放相关; 参考IDisposable模式用法详解
打开窗体Open函数,如果没有打开窗体,就调用初始化,然后Show显示出来; 如果已经打开,就调用Dispose释放资源,关闭窗体即可
这是框架,界面显示的基类接口IView,也是继承自IDisposable,自己控制资源释放相关; 以下是包含的各函数接口
这是layout布局的,总接口,继承自IView; 有添加、移除各个子物体的函数接口
回到窗体基函数,有一个Action委托队列mCommands,还有一个PushCommand函数,是塞Action到队列里
新增一个额外的静态工具类,是用来调用,添加Action的
添加一个事件系统EventDispatcher,通过字典mRegisteredEvents存储Action事件,通过Register方法,把key强转int32,添加到事件字典
移除事件,有两种形式,一种只是移除,事件队列里面,某个单一事件; 另一种,是移除全部事件;
Send触发事件
View界面类,继承自多IView界面基类; 创建一个抽象类EventRecord,是作为一个界面的事件容器,记录,包含Key和Action,队列mEventRecords是该事件容器的队列; RegisterEvent方法,是将事件添加到,事件系统,统一管理,再添加到界面类对应的,队列容器,进行存储
UnRegisterAll是取消注册全部的函数,SendEvent发送触发事件函数,暂时没使用到,因为事件系统EventDispatcher本身自带一个Send触发事件函数,还有各种样式;
帧更新函数RefreshNextFrame会调用,PushCommand方法,去添加,AddLayoutOption是添加布局样式相关
渲染前的处理,是样式的赋值
渲染,调用渲染前的函数,然后设置一下颜色,调用OnGUI即可
父类布局,还有从父类布局中,移除的相关逻辑
调用的是这个
创建一个布局额外工具类,包含的静态工具函数,是往父类布局,添加界面
自定义资源释放
Layout布局,是继承自View和ILayout布局基类的,有弄一个Children列表容器,存放IView界面; 添加子物体,也是配合该容器,进行即可; 设置一下,子物体的布局父类,是自身;
移除子物体的逻辑,就是移除布局,然后调用子物体的Dispose释放资源函数; 重写的更新函数,也是Foreach遍历调用,子物体,然后调用它们的Refresh函数即可;
布局的OnGUI渲染,有前后两个函数处理,中间包裹着,调用子物体的DrawGUI绘制函数