简易UnityUI框架

前言

最近自己写了一套简单的UI框架,基本思想是基于mvc的,但是由于是给比较小型的项目设计的框架,整体解耦并不十分彻底,这样降低了调试难度,整体复杂度也相对较低,算是按自己的理解做了取舍。

1.接口部分

1)底层系统类,全局唯一

AUIRoot:是根节点抽象类,负责所有系统的初始化
IUIManager:是UI组件的管理类,提供UI界面显示,返回等统一接口
IUIDataHandlerManager :是数据处理器管理类,提供对数据处理器的缓存,添加,移除等接口
IUILayerManager :是UI层级管理类,根据UI预设的层级划分,系统自动设置UI的父物体,利用unity的自然层级管理UI的显示层级
IUIEffectManager :是UI动效管理类,架构内的动效类与UI系统完全解耦,此类负责管理UI动效的播放,提供UI物体Active状态及对象初始化状态的回调接口
AUIPathManager :UI路径管理接口,类似与配置文件,需要手动在类的字典UIPathDic里配置路径

2)其他接口

AUIBase :UI基类,定义了处理UI的状态切换及回调事件等接口
AUIEffect :UI动效基类,定义了UI动效切换的接口及回调事件
IData :数据基类,用标记类为数据类
DataHandler :数据处理器接口,定义数据初始化,数据更新接口,此类进行数据的操作

2.结构构思

1)枚举

UI状态枚举

NOTINIT:是一个UI的默认状态,也就是UI对象还未生成出来的状态
INIT:是UI对象生成出来时,第一个执行的状态,初始化完成会自动执行SHOW状态,类似unity的Awake只执行一次
SHOW:是当UI显示时执行的函数
HIDE:UI隐藏时执行的函数

UI层级枚举

2)基本构思

——1)UIRoot会自动初始化所有系统,其中UILayerManager会自动生成层级父物体

用这种方式来给UI分层

——2)通过UIManager来控制UI的状态切换,在调用UIManager的show方法时,会自动调用UIlayerManger来设置UI的层级,并生成对象到对应的父物体下

——3)通过事件绑定的方式,若是对象上有动效脚本就会自动执行,没有就正常执行逻辑,动效部分代码是完全和UI逻辑分离的,就算删除动效部分的代码,完全不影响UI系统的执行

——4)所有的UI类要继承UIBase类,所有的UI类只处理UI的显示,每一个UI类都有对应的数据类和数据处理类

3.使用说明

1)自定义枚举

需要自定义UI的ID枚举,如

实际在框架内部,我是使用的string来存放ID,所以这里有两种方式:
——1.像图中这样,定义枚举来定义ID,在使用UIManager的show方法时,传进去即可
——2.定义一个类,在类中定义ID的静态只读字符串

2)自定义管理类

—–(1)继承UIDataHandlerManager类,实现自定义数据处理器管理类,需要实现RegisterHandler方法,如:

需要在RegisterHandler方法内如图中的方式,初始化自定义的数据处理器类,并缓存到字典内
—–(2)继承AUIPathManager类,实现自定义路径管理类,需要实现InitPathDic方法,如:

图中value的字符串是路径,测试代码的预制体直接放到了Resources下,所以这里直接赋值的预制体名称
有两种应用方式:
———–1.EUiId枚举直接定义成预制体名称,这样就不需要自己配置字符串了,但是这样预制体在Resources下必须都放到一个文件夹下,不能分类存放
———–2.如图中这样,分别配置每个预制体的路径,可以在Resources下分类存放
—–(3)继承UIRoot类,实现自定义UI节点类,需要继承两个方法
———–1.继承Start方法,如

实现启动主界面的业务逻辑
————2.继承InitUISystem方法,初始化需要自定义的系统,如

3)自定义UI显示层脚本

——1.需要根据UI的自身的需要选择继承基类,如主界面之类的这种全屏界面,一般是继承BasicUI类,像浮框这种界面,一般继承OverlayUI类,还有需要显示在这之上的UI就可以继承TopUI类
这些自定义类需要实现类的Init方法,并在Init方法中初始化调用InitUI方法来初始化UI数据,如:

需要赋值这个界面的ID还有自定义数据处理类的ID

——2.每个类需要定义它自己的UI数据类和数据处理器
每个数据处理器的NAME需要唯一,需要自己在创建类时定义,如

数据的初始化是在InitData方法中,如

例子中就这样简单写,实际应该是从本地或者云端获取数据

4)自定义UI动效类

继承AUIEffect类实现自定义UI动效类,这个类需要继承两个方法
——1.Enter方法,在UI显示的时候执行,所以在这个方法里定义UI显示时的动效
——2.Exit方法,在UI隐藏的时候执行,所以在这个方法里定义UI隐藏时的动效
使用时需要把预制体需要的UI动效类挂载到UI预制体上即可,或者也可以自己写一个类进行管理,动态挂载

以上便是本人自己花了几天时间,写的UI框架,比较简单,希望路过的大牛能花点点时间,给与指证。
GitHub地址:https://github.com/BlueMonk1107/BlueUIFrame

猜你喜欢

转载自blog.csdn.net/zcaixzy5211314/article/details/80473255