Unity 游戏资源更新之——AB包
一、初识AB包
AssetBundle是将资源用Unity提供的一种用于存储资源的压缩格式打包后的集合,它是对资源管理的一个扩展,可以动态地加载或者卸载,并且大大地节约了游戏所占的空间,即使是已经发布的游戏也可以用其来增加新的内容。因此,动态更新、网页游戏、资源下载等都是基于AssetBudle系统的。
二、具体开发步骤
- 创建AssetBundle,开发者在Unity编辑器中通过脚本来将所需的资源打包成AssetBundle文件。
- 上传至服务器。开发者创建好AssetBundle文件后,可通过上传工具将其上传到游戏的服务器中,使游戏客户端可以通过访问服务器来获取当前所需的资源,进而实现游戏的更新。
- 下载AssetBundle。游戏进行时,客户端会将服务器上的游戏更新所需的AssetBundle下载到本地设备中,再通过加载模块将资源加载到游戏中。Unity提供了相应的API可供使用来完成从服务端下载AssetBundle。
- 加载AssetBundle。AssetBundle 文件下载成功后,开发者通过Unity提供的API可以加载资源里所包含的模型、纹理图、音频、动画、场景等,并将其实例化来更新游戏客户端。
- 卸载AssetBundle。在Unity中提供了相应的方法来卸载AssetBundle,卸载AssetBundle可以节约内存资源,并且保证资源的正常更新。
三、AB包的打包
只有Assets面板下的资源文件才能被打包到AB包中,所以有些模型资源先被制作成Prefab预制体才行,在Inspector面板底部有AssetBundle的创建工具,空的AB包可以通过菜单选项“New”来创建。然后可以BuildAssetBundles,也就是创建好之后需要导出,这一过程需要编写代码实现。
四、AB包的下载
两种下载方式
缓存机制和非缓存机制
非缓存方式所下载的资源文件不会被写入Unity引擎的缓存区,而缓存机制下下载的资源文件会被写如Unity引擎的缓存区中。
非缓存机制通过创建一个WWW实例下载AssetBundle文件,采用此种方式下载的AssetBundle的文件不会存入缓存区。
缓存机制通过WWW类下的LoadFromCacheOrLoad接口来实现AssetBundle的下载,通过缓存机制下载的AssetBundle会被存储在Unity的本地缓存区中。下载前系统会在缓存目录中查找该资源,当下载的数据在缓存目录中不存在或者版本较低时,系统才会下载新的数据资源替换缓存中的原数据。
五、AsserBundle的加载和卸载
AssetBundle下载完成后,并不能直接被使用,需要将AssetBundle加载到内存中去并且创建成具体的文件对象,这个过程就是AssetBundle的加载,需要开发者编写代码实现,并且无论是在下载还是加载的过程中,AssetBundle都会占用内存。
1、如何加载?
将AB包下载到本地客户端后,就等于把硬盘或者网络的一个文件读到内存的一个区域,这是只是AB包内存镜像数据块,需要将AB包中的内容加载到内存中并且实例化AB包文件中的对象,Unity提供了三种不同的方法从已经下载的数据中加载AB包。
- AssetBundle.LoadAsset
- AssetBundle.LoadAssetAsync
- AssetBundle.LoadAllAssets
具体用法和意义请读者自行去查阅资料。
2、卸载AB包则是:
AssetBundle.Unload(XXX)
这个方法是使用一个布尔值参数来告诉Unity是否要卸载所有的数据(包括加载的资源对象)或者只是已经下载过的被压缩的资源数据。
1、如果是AssetBundle.Unload(false)
false是指释放AB包文件的内存镜像,不包含Load创建的Asset内存对象。
2、如果是AssetBundle.Unload(true)
true是指释放那个AB包文件内存镜像并销毁所有用Load创建的Asser内存对象。
Unity仅可以将一个特定的实例化AB包在应用程序中加载一次,如果加载一个已经加载并且没有被卸载的AB包,Unity会报错。所以对于不再使用的AB包,或者卸载或者避免下载,这也就解释了AB包为什么一般需要被卸载。
六、管理依赖
任意Bundle中的资源都可能会依赖于其它的某个资源,比如几个不同的模型都使用了某张贴图。
如果一个共享的依赖资源被包含在每一个使用它的对象中,那么当这些对象被打包时,此部分共享的资源就会被多次打包,这会造成内存的浪费。为了避免这种浪费,需要将共享的资源打包到一个单独的AB包,然后让两个模型所隶属的AB包分别依赖于该AB包。
通过这样的方法,该依赖资源仅被打包一次,从而起到节省游戏资源的效果。现在Unity会自动判断并处理所打包的资源之间的依赖,开发者仅需将所有资源一次性打包到指定的文件夹下,相关依赖的管理都有系统自动解决,不再需要手动处理。
七、存储和加载二进制文件
AB包可以把Unity3D中的文件或者资源导出为一种特定的文件格式(.Unity3d),导出的特定格式的文件能在需要的时候加载到场景中去。
如果想要保存以“.bytes”为扩展名的二进制数据文件,需要在Unity中将该文件保存为TestAsset文件,然后才能对AB包进行加载,在通过检索二进制文件数据来实现。
八、在资源中包含脚本
Unity中也可以把脚本打包成AB包,但要注意它与普通资源文件的处理方式不同,并且实际上也不会执行代码。如果你想在AB包中包含代码,就需要将脚本预编译并上传到网站中,摒弃引用Reflection类来实现。
Unity 游戏资源更新之——AB包相关推荐
- Unity之WebGL加载ab包
一.效果 二.注意事项 网上有好多关于webgl加载ab包的方法,在实际跟随他们写的操作都失败了,最终在踩坑下我总结了webgl加载ab包要注意的三个问题: 1.ab包的创建生成BuildTarget ...
- 【Novel AI】使用绘画AI构建unity游戏资源
请勿在商业用途中使用下面的示例图中的任何资源! 1. 设想: 首先根据自己的设想,创造一些角色原型,角色特点等等 这里我根据网络上找的一些参考,我大概想要的是比较特别的一个警察的猫+人形的动物角色: ...
- Unity 加载AssetBundle中AB包的几种方式
前言: 在unity中创建一个Cube,设置成预制体,生成AssetBundle中AB包,生成包代码如下: BuildPipeline.BuildAssetBundles(dir,BuildAsset ...
- Unity之ToLua_lua文件打成AB包的加载
Tolua提供了一个使用单例模式的LuaFileUtils类,这个类用来读取lua文件,可以根据自己的项目继承这个类来重写ReadFile方法. 首先我们得把打包好的lua文件加载进来,方便查找lua ...
- 提取Unity游戏资源和脚本
UnityStudio UnityStudio可以直接在自己的软件上查看图片.shader.文本.还能直接播放音频.甚至还能看场景Hierarchy视图的树状结构.强烈推荐用UnityStudio. ...
- AssetStudioGUI获取Unity游戏资源
文章目录 前提介绍 实现操作 效果 前提介绍 游戏数据来源 在此推荐查看高品质游戏的网站-七麦数据,可获取AppStore.小米商店.华为等厂商的游戏实时排行榜. 工具 AssetStudioGUI是 ...
- Unity 游戏资源ktx转换png
Unity 开发的模型贴图都是.ktx格式的,提取出来的资源,其中的ktx资源,用PVRTexToolGUI.exe可以打开查看,可以发现都是上下颠倒,且被拉伸 直接转为png格式的批处理脚本为: @ ...
- 游戏热更新(XLua)专题一(知识点)
课程学习笔记:https://ke.qq.com/course/337826 ps:建议搭配课程学习,吃透知识点,解决疑惑:什么是xlua,热更新和xlua什么关系,xlua和lua又是什么关系?等等 ...
- Unity的AB包系统使用概论
0. 名词表 资源:Resource,主要分为Prefab,Image,AudioClip等,一般在开发时为单个文件 包/ab包:AssetBundle,打包后的单个文件,内含若干资源 包名:Asse ...
- Unity游戏开发客户端面经——热更新(初级)
前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习.由于文本太多,按类型分开.这一篇是 热更新 常问问题总结,有帮助的可以收藏. 1. 热更新的原理 1.1 为什么使用Lu ...
最新文章
- HarmonyOS技术特性
- 【转载】C#编码标准━━项目设置和项目结构
- 虚拟桌面环境需要一个什么样的接入网络?
- 如何将NSString转换为NSNumber
- 从命令行及java程序运行MyBatis Generator 1.3.x生成MyBatis3.x代码
- 文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FormMain --- 未能加载基类...
- CentOS下搭建Squid代理服务器
- 查看linux服务器硬件信息
- Delphi实现类似Android锁屏的密码锁控件
- 初探swift语言的学习笔记二(可选类型?和隐式可选类型!)
- 汇编语言 利用ASCII以及AND OR进行字符串大小写转换
- mysql coreseek_centos+php+coreseek+sphinx+mysql之一coreseek安装篇
- debian6 snmpd 安装配置
- 常见的算法题目分类图
- 创建者模式 --- 单例模式
- fa萤火虫算法c语言,优化算法笔记(十)萤火虫算法
- 用beamoff给VMware的Mac OS X 10.10.x加速
- 行人重识别(ReID) ——基于MGN-pytorch进行可视化展示
- 详解LVDS通信协议
- 24个希腊字母(符号) 附字母表
热门文章
- 回声消除性能评判指标
- 数据库系统概念 第五章 习题答案
- HBase(二)——下载 HBase
- 建筑专业规范大全 2020版_房屋建筑工程现行规范标准目录汇编(2020版)—防水工程...
- win10资源管理器打开缓慢,自动搜索
- 如何下载海淀区卫星地图高清版大图
- 解决smtp出现(500, b'Error: bad syntax')
- 网页版进销存2.0-部署手册(windows版)
- 精读《useEffect 完全指南》
- iOS Charles(青花瓷)安装