游戏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. jQuery插件的开发

    jQuery插件的开发包括两种: 一种是类级别的插件开发,即给jQuery添加新的全局函数,相当于给jQuery类本身添加方法.jQuery的全局函数就是属于jQuery命名空间的函数,另一种是对象级 ...

  2. python基础(二)字符串內建函数详解

    字符串 定义:它是一个有序的字符的集合,用于存储和表示基本的文本信息,''或""或''' '''中间包含的内容称之为字符串特性:1.只能存放一个值2.不可变,只能重新赋值3.按照从 ...

  3. Cocos2d-x 的“HelloWorld” 深入分析

    本节所用Cocos2d-x版本:cocos2d-1.0.1-x-0.12.0 不能免俗,一切都从“HelloWorld!”开始.打开HelloWorld工程,里面有两个文件目录Classes和win3 ...

  4. 游标使用 和sp_executesql动态sql

    /****** Script for SelectTopNRows command from SSMS ******/ declare @oid int declare @cid int declar ...

  5. Java编译时出现No enclosing instance of type XXX is accessible.

    今天在编译Java程序的时候出现以下错误: No enclosing instance of type Main is accessible. Must qualify the allocation ...

  6. Intel X710网卡VxLAN offload 性能测试

    Intel X710网卡VxLAN offload性能测试 1.  测试环境参数: 交换机:盛科E580 服务器: Intel(R) Xeon(R) CPU E5-2650 v3 @ 2.30GHz ...

  7. bzoj2555

    开始时间:19:40 完成时间:21:00 传送门:http://www.lydsy.com/JudgeOnline/problem.php?id=2555 题目大意:(1):在当前字符串的后面插入一 ...

  8. 八 Appium常用方法介绍

    由于appium是扩展了Webdriver协议,所以可以使用webdriver提供的方法,比如在处理webview页面,完全可以使用webdriver中的方法.当然在原生应用中,也可以使用. 1.元素 ...

  9. eclipse修改主题配色

    1.Java-->Editor---> Syntax Coloring修改类中的各种代码颜色 2.General-->Editors --->Text Editors

  10. 利用Navicat实现MySQL数据库结构对比和同步

    在生产环境中,我们总会因为这样或那样的原因导致主从不同步,亦或者是测试环境要和生产环境进行同步,利用Navicat结构同步工具,不但能找出库结构差异,还可以针对create.modify.drop等进 ...