ZMUIL2——遮罩系统
ZMUIL2——遮罩系统
遮罩系统要做的工作
开启单遮模式时,每当调用UIModule来控制UI窗口显示隐藏时,
UIModule的遮罩系统都要计算显示的窗口中哪个窗口需要开启遮罩,并隐藏其他窗口的遮罩,以达到单遮的效果
UI配置文件可设定是否开启单遮模式
单遮模式:无论打开多少界面,遮罩只有一层。
叠遮模式:即每一个界面都有一层遮罩,打开的界面越多,遮罩就越黑。
UIModule的遮罩系统相关
配置文件
首先需要配置文件来控制遮罩系统的开关,使用继承ScriptableObject的单例配置文件
1234567891011121314151617181920using UnityEngine;[CreateAssetMenu(fileName = "UISetting", menuName = "UISetting", order = 0)]public class UISetting : ScriptableObject{ private static UISetting instance; public s ...
ZMUIL1——UI管理系统
ZMUIL1——UI管理系统
UI管理系统要做的工作
UI管理系统不仅要实现诸如控制UI窗口加载显隐等常见功能,还要实现独立于MonoBehaviour之外的UI对象生命周期函数
WindowBehaviour基类
WindowBehaviour声明窗口的基础属性,如gameObject、IsVisable等,并声明生命周期函数,如OnAwake等
使本框架下的窗口对象在拥有类似于MonoBehaviour的基础属性和生命周期函数的同时,我们可以自己控制UI窗口的生命周期函数的执行
WindowBase基类(继承WindowBehaviour)
将本框架下的UI窗口的部分共同功能抽象到该基类内,后续所有的Window脚本都继承于它
WindowBase会管理常用的UI控件,窗口的遮罩对象和所有UI控件的父节点对象。
提供窗口初始化方法、显隐窗口方法、显隐遮罩方法,以及常用UI控件的监听事件添加与移除方法等
UIMoudle
整个UI模块的核心,管理场景上的UI摄像机,UI根节点,UI配置文件,以及所 ...
ZMUI——UGUI框架ZMUIFrameWork
ZMUI——UGUI框架ZMUIFrameWork
ZMUIFrameWork
关于本框架你需要知道的
本框架的每个界面都有各自的Canvas,原因是:
Canvas 本身并不占用 DrawCall,Canvas上的UI控件,贴图等才会
Canvas 分离能最大化的减少网格重建带来的性能消耗
将所有的内容都集中到一个Canvas会导致其过于复杂,可能会频繁触发网格重绘,反而降低性能
很少有同屏Canvas会超过五个的情况
推荐阅读:如何把 UGUI 做到极致的优化
框架的各个系统
UI管理系统
遮罩系统
层级系统
自动化系统
堆栈系统
高性能系统
本框架优点
不继承MonoBehaviour但和继承MonoBehaviour使用起来无任何差别。
例如:Transform和GameObject等都可以正常使用
不受MonoBehaviour声明周期影响,声明周期完全可控,代码运行顺序掌握在自己手中。
智能化全自动化UI框架,无需手动创建脚本、声明方法、变量、拖拽物体赋值。
UI脚本、方法、属性字段自动生成,UI组件自动拖拽绑定,一键搞定 ...
UFL1-3——安全性问题解决
UFL1-3——安全性问题解决
前置知识点
细节知识点
C#中抽象类的知识点(C#四部曲之C#核心)
C#中反射相关知识点(C#四部曲之C#进阶)
Unity中Destroy函数(Unity四部曲Unity入门)
Unity中特性相关知识(Unity四部曲Unity入门)
唯一性问题——构造函数问题的解决
虽然公共构造函数可能给我们带来破坏唯一性的安全隐患
但是在实际开发中,单例模式是非常基础的知识点,可以说是程序员的必备基础知识
在使用时几乎不会有人马虎到自己去new单例模式对象
因此即使我们不做这些安全性的处理,其实也不会有太大问题,根据实际情况和需求进行设计即可
构造函数带来的唯一性问题
对于不继承MonoBehaviour的单例模式基类:我们要避免在外部 new 单例模式类对象
对于继承MonoBehaviour的单例模式基类:由于继承MonoBehaviour的脚本不能通过new创建,因此不用过多考虑
类似于下面的代码就会出现安全性问题,我们在外部new了一个单例模式的类对象,这破坏了单例模式唯一性:
12TestMgr t = new TestMgr ...
UFL1-2——继承MonoBehaviour的单例模式基类
UFL1-2——继承MonoBehaviour的单例模式基类
继承MonoBehaviour的单例模式对象,建议大家使用自动挂载式的方案,其潜在的安全问题相对较小,制定好规则后可以忽略不计
前置知识点
大体知识体系
C#相关知识点(C#四部曲)、Unity相关知识点(Unity四部曲)
细节知识点
上节课的相关细节知识点
MonoBehaviour相关知识点(Unity四部曲之Unity入门中)
实现继承MonoBehaviour的单例模式基类的注意事项
继承MonoBehaviour的类不可以new()!!!
继承MonoBehaviour的脚本一定得依附在GameObject上!!!
实现挂载式的单例模式基类
这种方式不建议大家使用,因为很容易被破坏单例模式的唯一性,这种单例模式基类存在以下的问题:
可能会手动挂载了多个脚本
切换场景回来时,由于场景放置了挂载脚本的对象,回到该场景时 又会有一个该单例模式对象
还可以通过代码动态的添加多个该脚本,也会破坏唯一性
12345678910111213141516171819202122232425using Sy ...
UFL1-1——不继承MonoBehaviour的单例模式基类
UFL1-1——不继承MonoBehaviour的单例模式基类
不继承MonoBehaviour的基类
利用泛型相关知识,实现单例模式基类,对于可能存在的安全问题,详见UFL1-3——安全性问题解决
123456789101112131415161718/// <summary>/// 不继承MonoBehaviour的单例模式基类,内部为静态变量和静态属性,单例模式类可以直接继承该类,而无需自行实现单例声明相关内容/// </summary>/// <typeparam name="T">继承该类的类</typeparam>public class BaseManager<T> where T : class, new(){ private static T instance; private static T Instance { get { if (instance == null) ...
UFL1——单例模式基类
UFL1——单例模式基类
前置知识点
大体知识体系
C#相关知识点(C#四部曲)
细节知识点
面向对象(C#四部曲C#核心中)
静态、单例模式相关知识(C#四部曲之C#核心中)
泛型、泛型约束相关知识点(C#四部曲之C#进阶中)
单例模式
一般的单例模式差不多都会写类似于下面的这种形式,区别几乎只在于类名,该模式的特点是
单例模式的类只能有一个实例化对象,由该类的静态私有变量instance装载,外部不能实例化单例模式的类
单例模式类只会在程序启动时,或者第一次调用静态Instance属性时才会自己实例化一个对象,
而静态Instance属性是外部唯一能够调用单例模式唯一类对象的接口
而由于单例模式类的构造函数是私有的,外部无法实例化一个对象,它保证了单例模式类对象是唯一的
单例模式的类可以在外部随时调用该类的Instance属性来调用该类的唯一对象
123456public class GameManager{ private static GameManager instance = new GameManager(); //为该 ...
UF_OLD——旧版程序小框架笔记系列
UF_OLD——旧版程序小框架笔记系列
前置知识:C#前四部曲,Unity前三部曲,UGUI
已过时
由于程序框架系列课程已重置,因此在2023-08-22到2023-08-28期间的学习旧课程并完成的笔记标记为过时笔记
重置的课程补充了不少内容,因此该系列笔记也重置,请直接看重置的笔记,此目录的笔记下为原来的过时笔记
学习后记:
该系列的所搭建的程序框架,基本只涉及到Unity核心及以前的知识,而这些知识在现在的Unity主流开发里有些已经过时,有更好的方案可以替代
这些使用过时知识的内容,可以通过Unity进阶及其他的课程学习到的知识进行改进
因此该系列的最好的学习时间就是在完成Unity核心以后,进入Unity进阶之前,在深入学习Unity之前,就初步接触框架的思维
学习完该系列后,再学习接下来的课程,我们就可以回过头来对小框架进行改进
为什么第一步做这些?
公共模块可以简单的理解为整个程序框架,提升开发效率
这些模块在游戏中各处都会用到
往往这些模块在各个小项目中是通用的,完成一次之后可通用
注:笔记内所有代码都是跟课学习而来的,与课上的代码基本没有差别
但课上的这 ...
UG4L9-10——进度条
UG4L9-10——进度条
本章代码关键字
1234GProgressBar //进度条控件类gObject.asProgress //将元件类对象as成进度条类对象的属性gProgressBar.value //进度条的当前值gProgressBar.TweenValue() //进度条按照设定时间缓慢到达某个值
进度条
FairyGUI中的进度条的原理很简单
就是按进度改变一个元件的宽度、高度或填充比例
进度条分为两种,横向和纵向的
进度条的本质也是一个组件
在组件中按特定规则添加元件即可制作为进度条
创建进度条控件
自动创建 —— 菜单栏 —> 资源 —> 新建进度条(或者快捷按钮)
标题类型:文本元件显示的内容,表示当前的进度
百分比:50%
当前值/最大值:50/100
当前值:50
最大值:100
反向:从右到左
手动创建 —— 创建组件 —> 拓展选择为进度条
组件中关键元件名:
bar:横向进度条改变宽度 ...
UG4L9-9——按钮
UG4L9-9——按钮
本章代码关键字
123456789101112131415GButton //按钮控件类gObject.asButton //将元件类对象as成按钮控件类对象的属性,单选按钮和复选按钮都使用它gButton.text //按钮的文本标题显示内容gButton.icon //按钮的图片标题显示内容UIConfig.buttonSound //设置按钮默认音效UIPackage.GetItemAssetByURL() //通过URL来获取某个包里的资源UIConfig.buttonSoundVolumeScale //设置按钮默认音效音量大小GRoot.inst.EnableSound() //开启全局声音GRoot.inst.DisableSound() //关闭全局声音GR ...