UH1L3——AB包依赖
UH1L3——AB包依赖
本章代码关键字
12AssetBundleManifest //主包的依赖文件assetBundleManifest.GetAllDependencies() //传入包名,得到该包依赖的所有的包名
AB包依赖
当某个资源使用了另外一个AB包内的资源,则可以说该资源对那个AB包存在依赖
假设我们创建了一个红色材质球,让modelAB包中的Cube使用它,而不将这个材质球打包进AB包中
则下次进行AB包打包时,该材质球将被默认的打包到modelAB包内
而如果将这个红色材质球打入到其他AB包诸如head内,而只加载model包,在加载Cube将会导致Cube的材质丢失
因为model内并不存在Cube的材质
可见,一个资源身上用到了别的AB包中的资源
如果只加载这时自己的AB包,通过它创建对象,将会出现资源丢失的情况
这种时候需要把依赖包一起加载了才能正常
1234567//加载AB包AssetBundle assetBundle = AssetBundle.LoadFromFile(App ...
UH1L2——AB包资源加载
UH1L2——AB包资源加载
本章代码关键字
123456789101112AssetBundle.LoadFromFile() //指定AB包文件路径,加载AB包assetBundle.LoadAsset() //从AB包中加载文件,通过名字加载(不推荐)assetBundle.LoadAsset(, typeof()) //从AB包中加载文件,通过名字和类型加载(返回Object类型,需要as成对应的类型)assetBundle.LoadAsset<>() //从AB包中加载文件,通过名字和泛型加载(热更新无法使用)AssetBundle.LoadFromFileAsync() //异步加载AB包,返回AssetBundleCreateRequestAssetBundleCreateRequest //AB包创建请求,可以在协程里返回它挂起协程,直到加载结束assetBundleCreateRequest.a ...
UH1L1——AB包资源打包
UH1L1——AB包资源打包
AB包资源打包工具选择
使用Unity编辑器开发的自定义打包工具
官方提供好的打包工具:AssetBundles-Browser-master
关于高版本Unity导入AssetBundles-Browser-master
对于高版本Unity中,AssetBundles-Browser已经不能通过包管理器进行下载(发现包管理器中没有对应工具不用着急)
因为:高版本Unity用Addressables功能封装了AB包功能
你仍然可以在资料区下载AssetBundles-Browser-master包文件导入你的工程中
或者从github上去获取该脚本:Releases · Unity-Technologies/AssetBundles-Browser (github.com),下载最晚发布的源代码即可
若导入后报错,只需删除导入内容中的示例文件夹(test文件夹)即可
打开AssetBundles-Browser窗口
点击工具栏:Window ——> AssetBundle Browser
如何将资源与AB包关联起来
选择需要关联的资源,在 ...
U4S4——可寻址资源管理系统 Addressables
U4S4——可寻址资源管理系统 Addressables
前置知识
委托与事件(必备)
AssetBundle(必备)
Resources同步异步加载
ScriptableObject
协同程序基本原理
Addressables
Addressables 翻译过来是可寻址的意思,它是可寻址资源管理系统
是Unity从2018.2版本开始,建议用于替代AssetBundle的高阶资源管理系统,在之后的Unity的新版本中,AssetBundle 将渐渐被淘汰
但是,AssetBundle 对于大家来说,还是必备的知识点,因为目前市面上还有很多的项目依旧在使用较老版本的Unity进行开发或者迭代,
所以 AssetBundle 还是一种主流传统的资源管理方式
Addressables 和 AssetBundle 的主要作用是一样的:
管理资源
热更新
减小包的体积
本系列学习内容
导入Addressables
资源加载基础
寻址资源设置
指定资源加载
Label标签的作用
动态加载单个资源
动态加载多个资源
配置相关
Profile 概述窗口配置(设置 ...
UH1——AssetBundle
UH1——AssetBundle
AssetBundle
特定于平台的资产压缩包,类似于压缩文件
资产包括:模型、贴图、预设体、音效、材质球等等
AssetBundle是热更新和Addressable的基础,我们必须掌握它
本系列学习内容
AB包资源打包
AB包资源加载
AB包依赖
AB包资源管理器
AssetBundle的作用
相对Resources下的资源,AB包更好管理资源
相对Resources文件还有两大优势:
减少包体大小
可压缩资源
减少初始包大小
可进行热更新
资源热更新
脚本热更新
P1——实践项目【智械危机】
P1——实践项目【智械危机】
(大坑,不保证更新)
课程介绍和基础讲解
路点和寻路
Lowpoly风格
Blender
模型制作
项目立项与策划方案
游戏立项相关
目的、方向及分工
人员和组队
注意点
赚钱
设计相关
战斗系统设计
属性数值设计
游戏剧情设计
界面系统设计
UI框架搭建
UGUI相关
事件系统
UI系统框架
界面功能制作
设置界面
选关界面
百科界面
战前准备界面
游戏底层框架
导表数据自动生成C#数据类工具
导表配置支持
存档功能
整体游戏运行流程
Buff系统
战斗框架
战斗界面
生成敌人波次配置
敌人管理类
摄像机管理类
建造管理类
战斗流程管理类
战斗逻辑
敌人逻辑
跑通游戏流程
基础炮塔
炮弹逻辑
两种炮塔的制作
建造炮塔流程
炮塔菜单
全屏技能系统
模型制作
炮台模型制作
敌人模型制作
塔座及道路模型制作
使用Polaris插件制作Lowpoly地形
关卡场景编辑
UI资源和数据接入
欢迎界面正式美术资源接入
设置界面正式美术资源接入
选关界面正式美术资源接入
百科界面正式 ...
ZMUIL6——高性能系统
ZMUIL6——高性能系统
高性能系统要做的工作
高性能系统是为了解决UI性能问题,增加游戏的流畅度而设计的一系列性能解决方案。
主要针对渲染、重绘、顶点、UI组件、等多个方面进行性能的优化处理。
他的功能有以下几点:
一键优化合批。 自动根据图集图片和相邻组件的特征进行重新排序。
避免使用SetActive引起的UI重绘和GC垃圾。 用CanvasGroup和Scale进行代替。
使用UI对象池。 避免频繁的克隆物体导致的卡顿和GC。(在之前的UIModule里已经实现了,隐藏窗口不会直接销毁窗口对象,可复用)
智能化禁用不必要的组件属性。 从而来避免一些不必要的性能开销。
界面预加载。 针对复杂一些的界面我们可以使用预加载进行提前加载物体,来确保在真正使用界面时,能够流畅度加载出界面。
**高性能文字描边。**Unity描边组件是拷贝4份相同的文本顶点数占用量巨大。
一个字母的Text加上Untiy的描边一共占用30个顶点。
而我们的Text同样是一个字母加上描边能做到只占用6个顶点。性能是Unity组件的5倍。 (这课没讲,不用记辣)
组件自动序列化。 避免掉使用Find接 ...
ZMUIL5——堆栈系统
ZMUIL5——堆栈系统
堆栈系统要做的工作
堆栈系统可以设置窗口弹出队列,按照设定好的顺序在特定的时机顺序弹出多个窗口
堆栈系统依次弹出窗口时,打开或关闭弹出队列外的窗口,不会影响堆栈系统的窗口弹出
堆栈系统可以在弹出窗口时,可以随时向队列内添加新的需要弹出的窗口,或者清除弹出队列,取消堆栈系统的窗口弹出
堆栈系统是任何游戏必不可少的一项功能,它可以用作诸如首次进入大厅时一些特殊或活动面板的有序自动弹出,
从而让玩家能够更好的去了解到游戏内容和新增功能。
UIModule的堆栈系统相关
堆栈系统会控制UI窗口的显示隐藏,而UIModule负责窗口显隐的执行,因此堆栈系统主要在UIModule内实现
堆栈系统使用队列的原因
堆栈系统实际是使用队列容器来装载要显示的窗口的,而不是栈,
因为栈是后进先出,而向堆栈系统添加要显示的面板的时间是不确定的,例如服务器发送消息的时间就不确定
如果使用后进先出的栈,假设在弹出窗口1后,窗口2和窗口3先后入栈,这会导致下一个弹出的窗口是窗口3,造成窗口弹出顺序的混乱
而队列的先进先出的顺序就很符合直觉,也不会造成弹出顺序的混乱
123//UIM ...
ZMUIL4——自动化系统
ZMUIL4——自动化系统
自动化系统要做的工作
在拼接完UI面板后,自动化系统可以根据特定的解析规则解析UI面板,得到各个需要管理的UI控件的控件类型和控件名
根据以上的解析结果自动生成对应的组件查找脚本/组件数据脚本以及Window逻辑类脚本
自动化系统会自动完成繁杂的关联组件,监听函数声明与添加,重写生命周期函数等工作,让我们可重心放在UI控件交互逻辑的编写上
组件查找脚本/组件数据脚本负责获取并管理UI控件,供Window逻辑类调用UI控件,初始化方法里将Window逻辑类里监听函数添加到控件中
Window逻辑类是我们编写界面的交互的脚本,我们直接在该脚本内生成的各个函数内编写逻辑即可,对外接口函数在API Function代码块内编写
自动化系统会自动让Window逻辑类继承WindowBase,重写各个生命周期函数,预留对外的API Function代码块,声明各个UI控件的监听函数
当UI窗口添加控件时,可以重新生成组件查找脚本/组件数据脚本,再生成Window逻辑脚本,原来在Window逻辑脚本编写的内容不会被覆盖
组件查找脚本和组件数据脚 ...
ZMUIL3——层级系统
ZMUIL3——层级系统
层级系统要做的工作
本质是在UI窗口制作时,将窗口划分为不同等级,不同等级的窗口的Canvas层级所在的范围是不同的,具体如下图
本框架的设计理念是把每个不同等级的弹窗故意留了100个层级去适配特效。
即基础界面的特效永远不会穿插到二级弹窗上去,因为框架设计就已经避免掉了。
当然如果是相同等级的弹窗叠加的情况,该设计仍然有100的层级去适配叠加的情况。
根据这个思路制作不同等级的窗口的模板预制体,将其Canvas的层级设置为每个等级对应的最小层级,
这样制作UI面板只需要根据面板的等级来选择不同的模板,再修改Canvas层级即可制作
通过测试可以发现,单纯的多个Canvas并不会增加DrawCall,只有当Canvas上出现UI控件时才会增加Drawcall
补充:采用多Canvas的原因
UGUI会自动合并批次,也就是说,一个Canvas下的所有元素会合并到一个Mesh内。这意味着,如果一个Canvas下的元素很多,将会造成一个过大的Mesh,而且元素发生改变时,整个Mesh都要重新绘制,开销很大,很可能造成卡顿。
因此,一旦UI界面复杂 ...