Skip to main content
 首页 » 资源教程

【游戏UI框架设计】最简版本设计

2017年04月13日 17:32:356770蛮牛网

 为降低难度决定先讲解一个最简版本,阐述UI框架的核心设计理念。这里先定义三个核心功能:

   1:UI窗体的自动加载功能。   2:缓存UI窗体。   3:窗体生命周期(状态)管理。UI框架设计主要目的,就是尽可能的完成一些与具体游戏功能逻辑无关的一些底层事务性的功能实现。这些功能最好是自动或者是半自动的实现,无须客户程序(调用框架的程序)再去过多处理与关心。

 【游戏UI框架设计】最简版本设计 资源教程 第1张

对于以上功能,笔者定义了UI框架的相关四个核心类:

  •   BaseUIForms    基础UI窗体脚本(父类,其他窗体都继承此脚本)

  •   UIManger.cs    UI窗体管理器脚本(框架核心脚本)

  •   UIType             窗体类型 (引用窗体的重要属性[枚举类型])

  •   SysDefine        系统定义类(包含框架中使用到的枚举类型、委托事件、系统常量、接口等)

在SysDefine 文件中,定义本框架三个核心枚举类型:

 

上述三个核心枚举类型,解释如下:

UIFormType 枚举类型,表示Unity层级视图中挂载不同类型窗体的空节点。这里Fixed 表示固定窗体,表示可以挂载"非全屏非弹出窗体",例如RPG游戏项目中的“英雄信息”窗体等。

 

UIFormShowMode 枚举,表示窗体不同的显示方式。Normal 类型表示窗体与其他窗体可以并列显示; HideOther类型表示窗体显示的时候,需要隐藏所有其他窗体; ReverseChange 窗体主要应用与"弹出窗体",维护多个弹出窗体的层级关系。

UIFormLucenyType 枚举,是定义弹出“模态窗体”不同透明度的类型。

【游戏UI框架设计】最简版本设计 资源教程 第2张

上图是我们定义的UGUI 中的“根窗体”预设 "Canvas",在Untiy的层级视图中,可以看到我们定义了若干空节点,用于不同类型的UI窗体加载到不同的“根窗体”预设中,实现不同显示效果。

 

定义 UIType 类,主要是引用定义的三个核心枚举,方便使用 。代码如下:

 

【游戏UI框架设计】最简版本设计 资源教程 第3张

定义基础UI窗体 BaseUIForms 脚本,代码如下:

 

【游戏UI框架设计】最简版本设计 资源教程 第4张

【游戏UI框架设计】最简版本设计 资源教程 第5张

上述代码中,主要定义了UI窗体基类的四个重要虚方法,分别对应窗体的打开显示、隐藏、重新显示、窗体冻结(即:窗体显示在其他窗体下面)。方便窗体在不同状态下,针对不同的行为进一步做处理操作。例如,当窗体为“隐藏”与“冻结”状态时,如果此窗体有针对远程服务的网络连接(Socket套接字)时,则需要关闭网络连接,以节省网络资源。

 

定义“UI管理器”(UIManager.cs) 脚本,这是UI框架中的核心脚本,主要负责UI窗体的加载、缓存、以及对于“UI窗体基类”的各种生命周期的操作(显示、隐藏、重新显示、冻结)。

 

【游戏UI框架设计】最简版本设计 资源教程 第6张

【游戏UI框架设计】最简版本设计 资源教程 第7张

【游戏UI框架设计】最简版本设计 资源教程 第8张

【游戏UI框架设计】最简版本设计 资源教程 第9张

【游戏UI框架设计】最简版本设计 资源教程 第10张

【游戏UI框架设计】最简版本设计 资源教程 第11张

UI管理器脚本解释如下:

一:上述代码中重要字段的解释如下:

1: “_DicFormsPaths” 表示“UI窗体预设路径”集合,负责缓存所有UI窗体预设的名称与对应资源路径的关系。

 

2: “ _DicALLUIForms” 表示“所有UI窗体”集合,负责缓存已经加载过的所有UI窗体名称以及与之对应的UI窗体。

 

3: “_DicCurrentShowUIForms”表示“当前正在显示”集合,负责控制正在显示UI窗体的内部逻辑。

 

4: UI管理器脚本中的“_TraCanvasTransfrom”、“_TraNormal”、“_TraFixed”、“_TraPopUp”、“_TraUIScripts”,分别表示Unity层级视图中的根结点、普通节点、固定节点、弹出节点、管理脚本节点,这些节点是加载UI窗体的不同类型的父节点,用于各种UI窗体的管理工作。

 

二:上述代码中重要方法的解释如下:

1: ShowUIForms() 是外部程序调用本框架的对外公共方法,负责加载、缓存、打开与显示制定窗体名称的UI窗体预设。

 

2: LoadFormsToAllUIFormsCatch() 是根据UI窗体的名称,加载到“所有UI窗体”缓存集合中。

 

3: LoadUIToCurrentCache() 是把当前窗体加载到“当前窗体”集合中。

 

上述(UI框架)脚本编写完毕,测试成功后效果如下图:

【游戏UI框架设计】最简版本设计 资源教程 第12张

为广大读者进一步了解与熟悉本框架,特提供(部分)下载链接:http://pan.baidu.com/s/1skN2Njn 密码:2ey6 

评论列表暂无评论
发表评论