游戏UI系统设计

1.需要实现的功能

  • UI界面的管理(窗体加载、窗体显示、窗体隐藏、窗体销毁等)
  • UI分层次(比如弹窗、广播信息需要在上层)
  • UI界面的出场、入场动画
  • UI界面的显示效果(比如带透明背景、带高斯模糊背景等)
  • UI可以动态更新

2.程序方面设计

  • UI需要MVC分离
  • UI与其它模块交互信息需要低耦合

3.具体怎么做

  可以知道的是,首先UI界面的设计需要采用MVC模式,将界面的显示独立出来,这一块需要继承MonoBehaviour,以便挂载到UIPrefab上。

  View:

  1.只做数据的展示,而不做数据的处理。

  2.只接受controller的事件,对于其他外部的事件一概交由controller处理。

  3.按钮的响应回调,建议也放到controller里面去处理。

  4.view的创建,也交到controller里面处理。

  Controller:

  1.接受外部的数据、事件并且做好处理,然后存入对应的数据层,同时通知view层做显示。

  2.controller与view之间的交互,最好采用事件通知,而不是直接的调用。

  3.对于data层,可以在controller直接写,也可以独立出来。

 

  上面说的MVC分离,针对的是单个的界面而言,比如排行榜界面,邮件界面等,那么整体的又该如何来管理呢?

 

UI界面的管理

  对于UI界面管理,其实需要做这些事情:

  1. 明确UI的层级,这个在最开始的时候就要设计好,按照功能来讲,一般游戏都有的,最低层级的背景,然后是正常UI内容,然后是各种弹窗,然后最上层可能是系统通知一类,

  那么假设现在有背景、正常UI内容、弹窗、系统通知,那么我们在做的时候就应该设定好这四层,并且每一层的层次都是依次递增的,不然的话显示就会不正确。

 

  2. UI的资源加载,一般来说,是将一个个UI分模块制作成为预制体,然后在需要用的时候,通过资源加载,然后将其实例化显示,在这个过程中,我们按照上面提到的,那么应该先

  创建每一个UI界面的Controller,然后在需要的时候,通过controller来显示对应的View。但是在这个过程中,有些界面不是很常用,可能偶尔用一次,就不用了,那么这个时候就会

  涉及到如何来管理这些加载进来的资源,对于这种不常用的窗体来说,显示完后,就应该把他给销毁了(节省内存),而对一些常用的,可能就需要保存引用,避免频繁加载资源带来的

  IO问题。

UI显示效果

   对于UI带有特殊效果的,比如有进场、出场动画,弹窗有黑色半透明背景,或者带有高斯模糊背景的弹窗,这些效果应该如何处理。

  通常的做法是给每一个UI进行分类,比如有出场动画、入场动画的是一类,没有任何动画的是一类,有背景的是一类,有高斯模糊的是一类,然后在写所有UI类的父类的时候,在父类里面写Enter,Exit等

  状态方法,在这些方法中调用一些对应的显示方法,这些显示方法则是根据UI分类不同而不同,这样就统一做出了UI显示效果,而不用每一个UI都去写一遍,当然,可能某一个UI有不同的显示动画,这个

  时候,可以覆写父类的动画方法,这样就OK了。

UI与其它模块交互

  要降低耦合,那就使用事件通知,避免直接调用,一般来说这是个简单但是却非常有效的方法。

转载于:https://www.cnblogs.com/leiGameDesigner/p/8650110.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/414410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

String转List,String转数组,List转ArrayList,数组转List

String转List private List<String> strings; strings Arrays.asList(dataBean.getImgs().split(",")); String转数组 String ac "12&/*?*/3"; String shuzu [] null; shuzu ac.split("");//是[12&/,?,3] 特殊字符用中括…

docker容器配置加速器

1.编辑docker配置文件 vi /etc/docker/daemon.json加入如下配置&#xff1a; {"registry-mirrors":["https://docker.mirrors.ustc.edu.cn"]}该链接为中科大加速器地址&#xff0c;无需注册。 2. 执行命令生效 systemctl daemon-reload systemctl res…

软件测试原则

软件测试原则测试 原则 测试原则 测试证明软件存在缺陷 测试的本质是证明软件存在缺陷&#xff0c;而不是软件没有缺陷。 人无完人&#xff0c;只要是人写的代码&#xff0c;肯定不能保证百分之百正确&#xff0c;除非特别简单的功能。即便如此&#xff0c;也会存在各种环境问题…

Unable to add window token null is not valid is your activity running

莫名其妙的报错 错误原因是不在主线程调用了弹窗方法 解决方法很简单 创建Handler static final int REFRESH_COMPLETE 0X1112; private Handler mHandler new Handler() {public void handleMessage(android.os.Message msg) {switch (msg.what) {case REFRESH_COMPLETE:Ob…

01-Flutter移动电商实战-项目学习记录

01-Flutter移动电商实战-项目学习记录 一直想系统性的学习一下 Flutter&#xff0c;正好看到该课程《Flutter移动电商实战》的百度云资源&#xff0c;共 69 课时&#xff0c;由于怕自己坚持不下去&#xff08;经常学着学着就不学了&#xff09;&#xff0c;故采用博客监督以记之…

matplotlib 的一些知识

import matplotlib.pyplot as plt plt做图有两种方式&#xff0c;一种是面向对象编程方式的&#xff0c;一种是直接利用plt的结构化的快速绘图编程方式。所以命令不能用错地方。figplt.figure() 返回的fig为Figure类对象 ax1fig.add_subplot(111) 返回的ax1为Axes类对象 这个…

02-Flutter移动电商实战-建立项目和编写入口文件

02-Flutter移动电商实战-建立项目和编写入口文件 环境搭建请参考之前写的一篇文章&#xff1a;Flutter_初体验_创建第一个应用 1、创建项目 采用AndroidStudio构建本项目&#xff0c;FIle>New>New Flutter Project… 创建后的项目如下图所示&#xff1a; 我们着重需要…

Android 倒计时——Timer和CountDownTimer的使用,实现启动,暂停,继续,重复,重设时长以及启动service后台倒计时

实现效果 单个倒计时功能 列表倒计时功能 自定义倒计时类 public class CountDownTimerSupport implements ITimerSupport {private Timer mTimer;private Handler mHandler;/*** 倒计时时…

cin和scanf读入速度

cin慢是有原因的&#xff0c;其实默认的时候&#xff0c;cin与stdin总是保持同步的&#xff0c;也就是说这两种方法可以混用&#xff0c;而不必担心文件指针混乱&#xff0c;同时cout和stdout也一样&#xff0c;两者混用不会输出顺序错乱。正因为这个兼容性的特性&#xff0c;导…

03-Flutter移动电商实战-底部导航栏制作

03-Flutter移动电商实战-底部导航栏制作 1、cupertino_IOS风格介绍 在Flutter里是有两种内置风格的&#xff1a; material风格&#xff1a; Material Design 是由 Google 推出的全新设计语言&#xff0c;这种设计语言是为手机、平板电脑、台式机和其他平台提供一致&#xff…

plugin since you are using Gradle version 4.6 or above

Android studio项目在新的开发环境下打开时报错如下 解决方法如下&#xff1a; 1、目录选到Android状态 2、进入gradle.properties文件。 3、org.gradle.configureondemandfalse——————默认是true。改完false即可

[转]调试 smallcorgi/Faster-RCNN_TF 的demo过程遇到的问题

最近在调试faster R-CNN时&#xff0c;遇到了各种各样的问题。使用的算法库为https://github.com/smallcorgi/Faster-RCNN_TF 注&#xff1a;本文使用的是通过virtualenv 创建python虚拟环境进行调试&#xff0c;python 版本2.7&#xff0c;tensorflow 版本为tensorflow1.4-gpu…

04-Flutter移动电商实战-打通底部导航栏

04-Flutter移动电商实战-打通底部导航栏 关于界面切换以及底栏的实现可参考之前写的一篇文章&#xff1a;Flutter实 ViewPager、bottomNavigationBar界面切换 1、新建4个基本dart文件 在pages目录下&#xff0c;我们新建下面四个dart文件。 home_page.dart :商城首页UI页面…

【机器学习】--模型评估指标之混淆矩阵,ROC曲线和AUC面积

一、前述 怎么样对训练出来的模型进行评估是有一定指标的&#xff0c;本文就相关指标做一个总结。 二、具体 1、混淆矩阵 混淆矩阵如图&#xff1a; 第一个参数true&#xff0c;false是指预测的正确性。 第二个参数true,postitives是指预测的结果。 相关公式&#xff1a; 检测正…