一、概述
不知不觉入行Unity3D也四五年了,期间经历了几个手游项目,正好想写点什么总结性的文章来记录一下自己对过往经验的一些思考。
这篇文章主要记录一下正在使用的UI框架在演进过程中遇到的问题的一些小的思考。
二、关于组件和可复用
在实践过程中,UI界面元素其实大致分为两类,一类是重复的结构在UI界面以列表、网格等形式重复出现,一类是非重复或者容器性质的UI界面元素。所以在设计UI管理类的时候,思路上就可以定义两个概念:面板和组件。基本关系可以是:所有完整的界面都是面板,而面板同时可以持有多个组件,并作为一个父级单位管理好子级的组件的生命周期。
组件存在的意义一方面是可以拼一个预设体,让面板负责实例化,达到复用。另一方面是,对于复杂结构的面板,可以做功能拆分,减少超重型面板。
有了这个划分,UI脚本的模板即可以围绕此设计出来面板和组件两类。
由于Unity的UGUI只提供了ScrollRect,在此基础上,UI框架本身可以封装类似于iOS的ListView/CollectionView或者Android的RecycleView等风格的自动管理组件复用的UI,这样,类似于列表和网格类的UI就可以通用,而无需每次都去造轮子。
三、关于MVC
数据、逻辑、界面分离的话题,并不是Unity开发独有。
一般来说,支持热更新的项目,用的比较多的应该是C#底层 + Lua脚本的形式(不讨论ILRuntime和Huatuo等C#热更新框架)。大多数的UI界面写在Lua层比较方便进行热更