Unity基础知识学习四,UI框架设计_游戏ui框架设计-程序员宅基地

技术标签: unity  ui  Untiy  

这个随便照着公司项目搞几下,回答一下就行

1.什么是UI框架

高内聚,低耦合,管理繁杂的UI。

2.为什么要有UI框架

3.如何使用UI框架,使用UI框架的不同方案比较

3.1 简单UI框架

这里写图片描述

4.UI框架源码实现

4.1.设计目的

4.1.1 解决UI控件越来越多,耦合性高,管理混乱。

4.1.2 优化UI重复打开的性能。

4.1.3 管理多个界面重叠显示的情形。

4.2.设计思想:

4.2.1 栈的设计思想。

后进先出,先进后出。后打开的页面覆盖先打开的页面。

每当新打开一个界面,都把一个UIModel放入栈中。每关闭一个界面,从栈中拿出来一个UIModel。

4.2.2 glue胶水的设计思想

在UI执行某个行为之前,对这个行为,遍历一遍glue胶水层。来对这个界面和行为,进行自定义的初始化。有点像流水线模式。

4.2.3 模板的设计思想

模板模式 | 菜鸟教程模板模式 在模板模式(Template Pattern)中,一个抽象类公开定义了执行它的方法的方式/模板。它的子类可以按需要重写方法实现,但调用将以抽象类中定义的方式进行。这种类型的设计模式属于行为型模式。 介绍 意图:定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 主要解决:一些方法通用,却在每一个子类都重新写了这一方法。 何时使用:有一些通用的方法。..https://www.runoob.com/design-pattern/template-pattern.html基础界面,没有自定义模板就使用默认模板。OnAwake,OnShow,OnAfterShow,OnHide,OnDestroy

4.2.4 缓存池

享元模式 | 菜鸟教程享元模式 享元模式(Flyweight Pattern)主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。 享元模式尝试重用现有的同类对象,如果未找到匹配的对象,则创建新对象。我们将通过创建 5 个对象来画出 20 个分布于不同位置的圆来演示这种模式。由于只有 5 种可用的颜色,所以 color 属性被用来检查现有的 Circle 对象。 介..https://www.runoob.com/design-pattern/flyweight-pattern.html重新打开某个界面的时候,不需要重新创建页面,只需要从缓存里面拿出来。

4.3 框架主体结构:

4.3.1 MVVM结构

MVVM框架 - 简书了解MVVM框架吗? Vue.js React.js Angular.js 谈谈你对MVVM的认识? MVVM的定义 M:Model(服务器上的业务逻辑操作)V:View(页...https://www.jianshu.com/p/e4e3519a58a6

MVVM的定义

M:Model(服务器上的业务逻辑操作)
V:View(页面)
VM:ViewModel(Model与View之间核心枢纽,比如Vue.js)

 UIMgr控制特定的UIModel,然后UIModel控制特定的View.

4.3.2 UIMgr.类

4.3.2.1 配置显示规则

两种规则UIHideOtherRule.lua和UIOverlayRule.lua,就是隐藏别人和不隐藏叠加。以及一个UIStackRule.lua 维护界面UI的栈。

4.3.2.2 一个缓存池,关页面的时候存入缓存,开页面的时候检测缓存里面有没有值。

4.3.2.3 创建和管理UIModel。

4.3.2.4 执行模板UIDisplay.lua和规则。

4.3.3 UIModel类

根据UIPanelConfig.lua中的lua文件路径,创建一个独立的table环境。
以及存储UI的各种信息。比如说gameobject的节点,比如ui的define名称。
 

4.3.4 Rule类(重点StackRule)

根据页面打开的param来配置显示的Rule,主要由UIHideOtherRule.lua和UIOverlayRule.lua,就是打开页面时隐藏别人和不隐藏别的界面而叠加。以及一个UIStackRule.lua 维护界面UI的栈。

4.3.5 UIPanelConfig类

存储定义的名称,以及:
PrefabPath
ScriptPath

等信息

4.3.6 Glue胶水

UIMgr.lua控制,执行打开关闭或者某个UI的特定函数的时候,顺带会把初始化好的胶水列表遍历一遍,在胶水中也执行这个特定函数。
比较典型的有组件收集,Coms,某个UI页面,Panel中定义了很多组件,比如CloseBtn,以及这个CloseBtn在界面prefab预制体中的路径,打开页面的时候,顺带会启动组件收集的Glue,把定义的CloseBtn对应的目录,转换成Unity场景中实际的gameobject。这样就能直接调用和操作了。

4.3.7 模板函数

基础界面的模板,对界面操作的时候,也会对模板进行操作。

4.3.8 缓存Cache

一个缓存池,关页面的时候存入缓存,开页面的时候检测缓存里面有没有值。

4.4 基础设计模式封装

4.4.1 工厂模式提供Rule

根据打开界面的type,来选择显示节的Rule

4.4.2 模板模式

有自定义模板就自定义,如果没有就默认模板UIDisplay.lua

5.UI框架关键点,重要节点,疑难杂症场景

5.1 模态窗口和非模态窗口

窗口A弹出窗口B,如果窗口B是模态的,在窗口B关闭前就不可能切换到窗口A;如果B是非模态的,那可以在这两个窗口之间任意切换。

默认时非模态,A窗口背面能点击B窗口,如果要设置为模态,则需要在View的模板中,设置一个透明的幕布挡板,挡住点击事件。

如果要更改stack中的界面的显示层级,则需要涉及到renderOrder。

5.2 关掉栈后面的窗口

直接检索stack和出栈,然后销毁或者回收这个页面就行。

5.3 如何让后面的窗口不让点击

设置为模态,在View的模板中,设置一个透明的幕布挡板,挡住点击事件。

6.参考

MVVM框架 - 简书

基于Unity~UGUI的简单UI框架(附UIFramework源码)_cchoop的博客-程序员宅基地_ugui框架

Unity基于UGUI的UI框架_万事屋银ちやん-程序员宅基地_unity优秀的ui框架

模态窗口和非模态窗口_阿桑的专栏-程序员宅基地_模态窗口

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/u013617851/article/details/122818635

智能推荐

microk8s的registry私有镜像库

【代码】microk8s的registry私有镜像库。

开源项目,毕业设计_本科毕业设计拿别人的开源代码修改-程序员宅基地

文章浏览阅读1.5w次,点赞35次,收藏385次。自己在网上找的开源项目,比较好分享给大家热门开源项目(包含小四轴、智能手环、光立方、智能车、防丢器等项目)号外!号外!(搞四轴,有这套就足够了!)科研级别的小四轴STM32F4芯片支持WIFI且android手机控制自适应控制就是牛掰!该飞机面向有科研和强烈学习意向的小伙伴们使用,如果只是想玩的话你肯定不会喜欢这套四轴的,主要设计思想是提供一个高性能的控制和姿态算法验证平台,因此..._本科毕业设计拿别人的开源代码修改

Java快速开发框架_若依——Ruoyi添加自己的业务模块_ruoyi java17-程序员宅基地

文章浏览阅读1w次,点赞2次,收藏26次。QQ 1274510382Wechat JNZ_aming商业联盟 QQ群538250800技术搞事 QQ群599020441解决方案 QQ群152889761加入我们 QQ群649347320共享学习 QQ群674240731纪年科技aming网络安全 ,深度学习,嵌入式,机器强化,生物智能,生命科学。叮叮叮:产品已上线 —>关注 官方-微信公众号——济南纪年信息科技有限公司民生项目:商城加盟/娱乐交友/创业商圈/外包兼职开发-项目发布/安全项目:态势感.._ruoyi java17

CISCO 交换机配置 Web浏览器的方式-程序员宅基地

文章浏览阅读9k次,点赞2次,收藏3次。 当利用Console口为交换机设置好IP地址信息并启用HTTP服务后,即可通过支持JAVA的Web浏览器访问交换机,并可通过Web通过浏览器修 改交换机的各种参数并对交换机进行管理。事实上,通过Web界面,可以对交换机的许多重要参数进行修改和设置,并可实时查看交换机的运行状态。不过在利用 Web浏览器访问交换机之前,应当确认已经做好以下准备工作:·在用于管理的计算机中安装T..._思科交换机2960s有web配置吗

ERROR - file: tracker_proto.c, line: 48, server: 127.0.0.1:22122, response status 2 != 0-程序员宅基地

文章浏览阅读2.5w次,点赞2次,收藏6次。报错信息: [2018-09-09 20:33:12] ERROR - file: tracker_proto.c, line: 48, server: 127.0.0.1:22122, response status 2 != 0 [2018-09-09 20:33:12] ERROR - file: tracker_proto.c, line: 48, server: 127.0.0.1:..._error - file: tracker_proto.c, line: 48, server: 172.17.0.1:22122, response

使用matplotlib显示图片(《深度学习入门:基于Python的理论与实现》实践笔记)_matplotlib展示图片-程序员宅基地

文章浏览阅读3.9k次。使用matplotlib显示图片(《深度学习入门:基于Python的理论与实现》实践笔记)一、安装matplotlib库二、导入matplotlib.pyplot库和matplotlib.image库里的imread函数三、实例:显示图片一、安装matplotlib库在命令行使用下面的命令即可:pip install matplotlib二、导入matplotlib.pyplot库和matplotlib.image库里的imread函数在程序开头使用:import matplotlib.pyp_matplotlib展示图片

随便推点

【华为】华为防火墙双机热备

本篇文章主要是讲华为防火墙双机热备,主要是以CLI界面来配置,双机热备用到了VRRP(网关冗余技术)、VMGP和HRP(华为心跳协议),里面有详细的配置,可以放心食用呀

企业计算机服务器中了helper勒索病毒怎么办?Helper勒索病毒解密处理流程

Helper勒索病毒是近期新升级后的新变种勒索病毒,该勒索病毒非常猖狂,几乎攻击了所有暴露在公网之上的计算机端口,给国内众多企业带来了严重威胁,该勒索病毒能够伪装成系统不便识别的信任软件,通过远程桌面弱口令实施攻击,给企业带来了严重威胁,经过云天数据恢复中心工程师对多家企业中毒的helper勒索病毒解密,为大家整理了以下有关该勒索病毒的相关解密流程步骤。

简单聊聊JavaScript数组作为索引

简单聊聊JavaScrip数组作为索引的情况。

SpringCloud学习笔记1——入门篇_子模块继承之后,提供作用:锁定版-程序员宅基地

文章浏览阅读200次。搭建项目一、准备工作1.使用IDEA创建Maven父工程2.设置ctrl+alt+s打开设置①配置字符集编码②配置注解生效激活③配置Java编译版本④文件类型过滤(可选)3.修改项目①删除src目录,使项目只保留pom.xml删除前删除后②修改pom文件先添加如下内容<packaging>pom</packaging>如图然后将之后的内容使用如下内容替换<!--统一管理jar包版本--> <propert_子模块继承之后,提供作用:锁定版

(基于matlab自写代码)语音信号的短时分析,计算平均能量,短时过零数_matlab求语音信号短时过零率的函数-程序员宅基地

文章浏览阅读3.2k次。一定时宽的语音信号,其能量的大小随时间有明显的变化。清音段能量比浊音段小得多。短时过零数也可用于语音信号分析中,发浊音时,其语音能量约集中于3kHz以下,而发清音时,多数能量出现在较高频率上。可认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,故对一短时语音段计算其短时平均能量及短时平均过零数,就可以区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。这在语音识别中有重要意义。自己编写的matlab代码,对一段语音,取帧长为240个点,计算其平均能_matlab求语音信号短时过零率的函数

Ubuntu服务器创建新用户及解决新用户登录Access denied问题

默认情况下,在Ubuntu上,sudo组的成员被授予sudo访问权限。如果您希望新创建的用户具有管理权限,需要将将用户添加到sudo组。命令将向你询问一系列的问题。密码是必需的,其他字段都是可选的。最后,输入Y确认信息是否正确。执行完上述步骤后需要重启ssh服务,否则新创建的用户连接服务器时会出现。