游戏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. Memcached源码分析之items.c

    #include "memcached.h" #include <sys/stat.h> #include <sys/socket.h> #include ...

  2. 通过非root用户访问VNC

    我采用的是realvnc5.3.2.对于非root用户通过vnc访问linux桌面,网络上绝大数文章都是说要去配置/etc/sysconfig/vncservers.但安装完realvnc5.3.2之 ...

  3. [osg]osg显示中文信息

    转自:http://www.cnblogs.com/feixiang-peng/articles/3152754.html 写好了在osg中实时显示中文信息的效果.中间遇到两个问题,一个是中文显示,一 ...

  4. 快速搭建LNMP

    [centos 6.4 server]系统安装请参考:http://blog.zhuyin.org/748.html1.防火墙设置: iptables -F service iptables save ...

  5. 51nod1126(矩阵快速幂)

    题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1126 题意:中文题诶- 思路:构造矩阵: ( 0, 1 )^ ...

  6. Python twisted article

    学习python twisted 的好文章 An Introduction to Asynchronous Programming and Twisted Reference: http://kron ...

  7. java系列--过滤器

    在web.xml配置过滤器:过滤器一定要放在所以Servlet前面 过滤器的生命周期: 过滤器的应用: 1.编码格式 2.权限验证 3.数据库关闭

  8. php短数组写法

    在php 5.4+的版本中,可以使用  []  来表示  array() 例子: // On PHP 5.1 $data = array("foo", "bar" ...

  9. $http post 取不到数据

    默认情况下,jQuery传输数据使用Content-Type: x-www-form-urlencoded 和类似于"foo=bar&baz=moe"的序列,然而Angul ...

  10. HDU-2077-汉诺塔IV

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=2077 这题就我个人认为比较难,做了很久,递推关系式一直找不出正确的来,找很多递推关系,提交了很多次,全 ...