项目框架——UI管理器【UIManager】
其实我一直没想好怎么写这个UI框架的管理内容,总觉得自己这个设计并不合理,之前的项目和当前的框架有相关联的内容,也有很大的出路。之前的有做过动态添加控制脚本,也有挂载脚本,这次更是一改前风,我使用了非mono类进行管理UI,然后用UIManager去管理协同程序,这里面就存在一定的弊端,那就是没有办法监听被动停止协程或者让协程结束。当然这样做的好处就是方便日后dll热更新或者是修改成别的热更新方式。
下面我们还是来谈一下这次的框架设计。
框架,无非就是设计接口,UI设计了打开界面、获取界面、回收界面、添加监听、添加协同、移除协同一个六个接口,其中接口的意义都在字面上,也没有什么特别的,然后就是整体的管理流程了。
说UIManager之前,我们还是来先看看IUIModelControl这个界面对象。
是否参与回退:控制界面在当别的界面关闭时参与重新打开界面,但是目前没有用,因为我们打开界面的时候不会说去隐藏别的界面只会直接关闭别的界面,所以没有什么用;
是否允许别人关闭自己:控制别的界面打开的时候是否能关闭自己;
获取关联界面:这个就是打开自己的时候连带打开的界面;
关闭排除界面:关闭界面的时候是否需要关闭别的界面;
初始化界面数据:打开界面的第一步,将数据传递进去;
打开自身界面:显示界面;
关闭自身界面:关闭自己;
清除自身数据:一般是用在切换场景当中的统一关闭当中;
界面设置最上层:将界面设置到同层级的最上层;
界面的显示和隐藏:控制界面显示和隐藏;
数据更新:框架每帧调用方法。
当然还有一些别的方法,下面我们重点来说一下怎么使用这个框架。
上面这个图显示得清楚吗。
层级顺序基本不能变动,名字也不能修改,因为这个名字对应的是框架层级设定相对应的层级枚举。
这个是一个UI界面。
打开UI界面的时候不是使用这个名字,而是使用集成IUIModelControl的控制类,控制类当中设定了UI预制的名字,然后通过资源管理框架进行加载的。
当你打开这个框架的时候,你会发现还有一个IUIModelLuaControl,还记得前面的场景管理器,其实是一样的设定,这个只是添加了一个LuaTable,然后设定需要拥有init、update、destroy三个方法,这三个方法分别对应了显示界面、更新界面和销毁界面。
以前两个框架当中,都是prefab和控制类同一名字,这次设定了在控制类当中书写prefab名字以加载,一改之前的方法。
其他好像没没能说出什么,感觉都不重要却又觉得都很重要,框架具在,看官可以自己看看,有什么错误和建言都可以直接留言明说。
项目GitHub地址