游戏UI框架设计(一)

---架构设计理论篇

  前几天(2017年2月)看到一篇文章,国内王健林、马云等大咖们看好的未来十大最有“钱途”产业中,排名第一的就是“泛娱乐”。 所以我们发现最近几年无论是BAT企业还是万达等,都纷纷投资游戏、电影、动漫等泛娱乐产业。

  随着人们物质生活的不断提高,游戏(包含端游/手游/VR/AR等游戏形式)产业只会越来越繁荣。但是问题来了,我们一线的游戏研发人员面对越来越复杂与规模庞大的游戏开发需求(策划文稿),越来越多的开发人员就更加重视与强调优良开发框架的使用,以期进一步增强游戏开发效率与代码质量!

 本篇就基于Unity游戏引擎UGUI为基础,对UI界面游戏架构做一些有益探索与研究。首先我们来研究一下大型游戏项目中,没有UI框架容易导致与出现的问题:

问题1;

  以ARPG为例,多个场景会反复出现相同的“UI窗体”,造成多个场景中反复加载相同的UI窗体。

解决思路:

   “UI框架” 需要缓存项目(例游戏项目)中常用的“UI窗体"。

问题2:

  开发商业复杂项目时,各个UI(UI脚本)之间传值,容易出现“紧耦合”的情况,容易导致项目的“可复用性”降低。

解决思路:

  各个UI的生成、销毁、切换,都是通过框架(Manger)实现,各个UI之间不直接联系(传值),开发类似“消息传递中心”的机制来负责所有“UI窗体”或者UI脚本之间的传值。

问题3:

  卡牌、RPG等游戏类型项目,很多情况下会出现多个“弹出窗体” 叠加的现象,开发人员需要“手工”维护窗体中间的层级关系。

解决方案:

  设计UI框架系统,使用“栈”的数据结构,保存与控制当前所有需要显示的“UI窗体”的层级关系。

问题4:

  商业项目中多个“UI窗体” 叠加出现时,保持“UI窗体”的“模态显示”非常重要(即: 弹出子窗口时,不允许玩家操作父窗体),否则容易出现各种误操作。

解决方案:

 设计的框架本身,需要对当前显示的窗体做“遮挡处理”,即:不允许用户绕过当前“UI窗体”直接操作底层窗体,或者误操作点击项目中的3D游戏对象等。

  当然还有很多其他的问题,诸如:语言的国际化、“窗体预设”自动加载的管理等。但是设计UI框架一个总的核心原则是:尽量让框架本身完成与具体业务无关的事务性工作,让开发人员只需要专注游戏业务逻辑的开发本身即可。(这个原则同样适用于其他框架的设计中)

  为了解决以上商业开发遇到的各种问题,因此笔者设计如下UI窗体架构的“功能设计图”:

相应的类图设计如下:

为了更好的描述整个框架系统,笔者对整个框架分如下六个部分作详细描述:

  1. 最简版本设计
  2. 窗体的层级管理
  3. 模态窗体管理
  4. 配置管理与应用
  5. 消息传递中心
  6. 资源国际化技术

先写到这里,下篇来讲解“游戏UI框架设计(二):“最简版本”设计篇

游戏UI框架设计(一) : 架构设计理论篇的更多相关文章

  1. 游戏UI框架设计(6): 消息传递中心

    游戏UI框架设计(6) --消息传递中心 最近一直忙于一个益智类游戏的研发工作,所以博客有段时间没有更新了.经过朋友的督促,决定这两天立刻完成最后的两篇博客讲解(UI框架).说起“消息传递中心”,或者 ...

  2. 游戏UI框架设计(二) : 最简版本设计

    游戏UI框架设计(二) --最简版本设计 为降低难度决定先讲解一个最简版本,阐述UI框架的核心设计理念.这里先定义三个核心功能: 1:UI窗体的自动加载功能. 2:缓存UI窗体. 3:窗体生命周期(状 ...

  3. 游戏UI框架设计(三) : 窗体的层级管理

    游戏UI框架设计(三) ---窗体的层级管理 UI框架中UI窗体的"层级管理",最核心的问题是如何进行窗体的显示管理.窗体(预设)的显示我们前面定义了三种类型: 普通.隐藏其他.反 ...

  4. 游戏UI框架设计(四) : 模态窗体管理

    游戏UI框架设计(四) --模态窗体管理 我们在开发UI窗体时,对于"弹出窗体"往往因为需要玩家优先处理弹出小窗体,则要求玩家不能(无法)点击"父窗体",这种窗 ...

  5. 游戏UI框架设计(五): 配置管理与应用

    游戏UI框架设计(五) --配置管理与应用 在开发企业级游戏/VR/AR产品时候,我们总是希望可以总结出一些通用的技术体系,框架结构等,为简化我们的开发起到"四两拨千金"的作用.所 ...

  6. 游戏UI框架设计(7): 资源国际化技术

    游戏UI框架设计(7) --资源国际化技术 说起"资源国际化"技术,个人认为可以追述到微软Window2000 PC操作系统的发布,在这之前windows98操作系统的开发都是先由 ...

  7. 基于Struts2,Spring4,Hibernate4框架的系统架构设计与示例系统实现

    笔者在大学中迷迷糊糊地度过了四年的光景,心中有那么一点目标,但总感觉找不到发力的方向. 在四年间,尝试写过代码结构糟糕,没有意义的课程设计,尝试捣鼓过Android开发,尝试探索过软件工程在实际开发中 ...

  8. 第二课 Dubbo设计的架构设计

    总体架构 Dubbo的总体架构,如图所示: Dubbo框架设计一共划分了10个层,而最上面的Service层是留给实际想要使用Dubbo开发分布式服务的开发者实现业务逻辑的接口层.图中左边淡蓝背景的为 ...

  9. Redis(1.7)Redis高可用架构(理论篇)

    [0]常用架构种类 (0.1)单机Redis (0.2)单纯的Redis主从复制 (0.3)哨兵Sentinel+Redis主从复制集群(实现高可用自动故障转移) (0.4)Redis Cluster ...

随机推荐

  1. iOS制作毛玻璃效果

    //添加一个图片 UIImageView *imageview = [[UIImageView alloc]init]; imageview.frame = CGRectMake(10, 100, 3 ...

  2. UVA 1386 Cellular Automaton

    矩阵快速幂. 样例是这样构造矩阵的: 矩阵很好构造,但是500*500*500*logk的复杂度显然是无法通过这题的. 其实本题构造出来的矩阵是一个循环矩阵,只需直到第一行或者第一列,即可直到整个矩阵 ...

  3. JS利用短路原理简写if语句

    看GoogleDoodle-Dance的源代码,学习到一个小知识——简写if语句. 几乎所有语言中||和&&都遵循“短路”原理,如&&中第一个表达式为假就不会去处理第二 ...

  4. 2.4 easyui - panel的使用

    <div id="p" class="easyui-panel" title="My Panel"             style ...

  5. HDU 3501 Calculation 2 ——Dirichlet积

    [题目分析] 卷积太有趣了. 最终得出结论,互质数和为n*phi(n)/2即可. 计算(n*(n+1)/2-n-n*phi(n)/2)%md,用反正法即可证明. [代码] #include <c ...

  6. MAC上更攺jenkins默认安装目录

    /Library/LaunchDaemons #编缉里面的jenkinshome和username sudo vim org.jenkins-ci.plist #然后 sudo launchctl u ...

  7. STL基础知识

    一,STL的组成 1.什么是STL STL(Standard Template Library)标准模板库的简称,是由惠普开发的一系列软件的总称,STL现在是C++的一部分,已经被构建于编译系统之内, ...

  8. Linq左关联 右关联 内关联

    1.左连接: var LeftJoin = from emp in ListOfEmployees join dept in ListOfDepartment on emp.DeptID equals ...

  9. VC创建多级目录

    BOOL ForceCreateDirectory(string strDir)  {    BOOL bRet = FALSE;    //确保以"\"结尾,以创建最后一个目录  ...

  10. composer 安装和修改中国镜像

    参考:http://docs.phpcomposer.com/00-intro.html#Using-Composer http://www.phpcomposer.com/ 下载安装 下载并且运行 ...