一、初识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包相关推荐

  1. Unity之WebGL加载ab包

    一.效果 二.注意事项 网上有好多关于webgl加载ab包的方法,在实际跟随他们写的操作都失败了,最终在踩坑下我总结了webgl加载ab包要注意的三个问题: 1.ab包的创建生成BuildTarget ...

  2. 【Novel AI】使用绘画AI构建unity游戏资源

    请勿在商业用途中使用下面的示例图中的任何资源! 1. 设想: 首先根据自己的设想,创造一些角色原型,角色特点等等 这里我根据网络上找的一些参考,我大概想要的是比较特别的一个警察的猫+人形的动物角色: ...

  3. Unity 加载AssetBundle中AB包的几种方式

    前言: 在unity中创建一个Cube,设置成预制体,生成AssetBundle中AB包,生成包代码如下: BuildPipeline.BuildAssetBundles(dir,BuildAsset ...

  4. Unity之ToLua_lua文件打成AB包的加载

    Tolua提供了一个使用单例模式的LuaFileUtils类,这个类用来读取lua文件,可以根据自己的项目继承这个类来重写ReadFile方法. 首先我们得把打包好的lua文件加载进来,方便查找lua ...

  5. 提取Unity游戏资源和脚本

    UnityStudio UnityStudio可以直接在自己的软件上查看图片.shader.文本.还能直接播放音频.甚至还能看场景Hierarchy视图的树状结构.强烈推荐用UnityStudio. ...

  6. AssetStudioGUI获取Unity游戏资源

    文章目录 前提介绍 实现操作 效果 前提介绍 游戏数据来源 在此推荐查看高品质游戏的网站-七麦数据,可获取AppStore.小米商店.华为等厂商的游戏实时排行榜. 工具 AssetStudioGUI是 ...

  7. Unity 游戏资源ktx转换png

    Unity 开发的模型贴图都是.ktx格式的,提取出来的资源,其中的ktx资源,用PVRTexToolGUI.exe可以打开查看,可以发现都是上下颠倒,且被拉伸 直接转为png格式的批处理脚本为: @ ...

  8. 游戏热更新(XLua)专题一(知识点)

    课程学习笔记:https://ke.qq.com/course/337826 ps:建议搭配课程学习,吃透知识点,解决疑惑:什么是xlua,热更新和xlua什么关系,xlua和lua又是什么关系?等等 ...

  9. Unity的AB包系统使用概论

    0. 名词表 资源:Resource,主要分为Prefab,Image,AudioClip等,一般在开发时为单个文件 包/ab包:AssetBundle,打包后的单个文件,内含若干资源 包名:Asse ...

  10. Unity游戏开发客户端面经——热更新(初级)

    前言:记录了总6w字的面经知识点,文章中的知识点若想深入了解,可以点击链接学习.由于文本太多,按类型分开.这一篇是 热更新 常问问题总结,有帮助的可以收藏. 1. 热更新的原理 1.1 为什么使用Lu ...

最新文章

  1. HarmonyOS技术特性
  2. 【转载】C#编码标准━━项目设置和项目结构
  3. 虚拟桌面环境需要一个什么样的接入网络?
  4. 如何将NSString转换为NSNumber
  5. 从命令行及java程序运行MyBatis Generator 1.3.x生成MyBatis3.x代码
  6. 文件中的类都不能进行设计,因此未能为该文件显示设计器。设计器检查出文件中有以下类: FormMain --- 未能加载基类...
  7. CentOS下搭建Squid代理服务器
  8. 查看linux服务器硬件信息
  9. Delphi实现类似Android锁屏的密码锁控件
  10. 初探swift语言的学习笔记二(可选类型?和隐式可选类型!)
  11. 汇编语言 利用ASCII以及AND OR进行字符串大小写转换
  12. mysql coreseek_centos+php+coreseek+sphinx+mysql之一coreseek安装篇
  13. debian6 snmpd 安装配置
  14. 常见的算法题目分类图
  15. 创建者模式 --- 单例模式
  16. fa萤火虫算法c语言,优化算法笔记(十)萤火虫算法
  17. 用beamoff给VMware的Mac OS X 10.10.x加速
  18. 行人重识别(ReID) ——基于MGN-pytorch进行可视化展示
  19. 详解LVDS通信协议
  20. 24个希腊字母(符号) 附字母表

热门文章

  1. 回声消除性能评判指标
  2. 数据库系统概念 第五章 习题答案
  3. HBase(二)——下载 HBase
  4. 建筑专业规范大全 2020版_房屋建筑工程现行规范标准目录汇编(2020版)—防水工程...
  5. win10资源管理器打开缓慢,自动搜索
  6. 如何下载海淀区卫星地图高清版大图
  7. 解决smtp出现(500, b'Error: bad syntax')
  8. 网页版进销存2.0-部署手册(windows版)
  9. 精读《useEffect 完全指南》
  10. iOS Charles(青花瓷)安装