Unity脚本编程零碎学习笔记3-Unity中使用AssetsBundle

本文详细介绍了Unity中的AssetBundle概念,包括其作为资源压缩文件的作用、创建和上传流程,以及在开发和运行阶段的使用方法,涉及本地缓存、平台兼容性和资源识别策略。
摘要由CSDN通过智能技术生成

1.什么是AssetBundle

简单的说就是可以从Unity中导出的包含了我们所选择的资源的文件,这些资源包括任何可以被Unity3D引擎识别的资源格式,例如模型、贴图、音频剪辑或者一些游戏场景等。(需要注意的是,自定义的二进制文件后缀必须是bytes,这样导入时才会作为TextAssets资源导入。)
这些文件经过专门压缩成为Unity3D所以定义的格式,并且当使用Unity开发使用它们时也能被正确加载和释放。
(个人总结:AssetBundle就是Unity可以识别的一些资源压缩后的文件)
作用:
由于AssetBundle是将资源经过压缩之后产生的一种文件,因此可以使用AssetBundle来降低游戏容量。同时,由于AssetBundle还可以被Unity下载后再加载,因此还可以通过AssetBundle动态拓展使用Unity开发的应用。
(个人总结:压缩资源文件 和 热更资源)

2.使用AssetBundle的工作流程

开发阶段

分外两个部分:

  • 创建AssetBundle文件
  • 导出Unity引擎,上传到外部存储空间
创建AssetBundle文件
  • BuildPipeline 类
    BuildingPipeline常用API
  • 编写编辑器脚本拓展编辑器,使用BuildPipeline中的方法创建AssetBundle
上传AssetBundle

之后常常要做的便是将AssetBundle文件上传到远程服务器供已经开发好的游戏或者应用进行下载和更新资源,或是将该AssetBundle文件放在硬盘合适位置供游戏或者应用能够被正确加载

运行阶段

分外两个部分:

  • 从远程服务器或者本地磁盘下载AssetBundle文件
  • 从AssetBundle加载资源供游戏或者应用使用
在应用运行时下载AssetBundle文件

在Unity中,AssetBundle文件的下载有两种方式:
(1)无须缓存:这种方式无须将通过下载得到的AssetBundle文件保存在Unity的缓存文件夹中,直接通过创建一个WWW对象即可实现这种下载方式。
(2)需要缓存:这种方式将通过下载得到的AssetBundle文件保存在本地磁盘中的Unity缓存文件夹中。这种下载方式往往使用WWW的LoadFromCacheOrDowenload静态方法处理。
需要注意的是,本地磁盘的缓存空间限制:
* WebPlayer:50MB
* PC\IOS\MAC\Android:4GB
LoadFromCacheOrDowenload 方法有两个参数:
url:表示文件所在位置
version:则是AssetBundle进行缓存时分配给AssetBundle的一个表示缓存版本的数值。当Unity受到要求下载指令后,它先会根据version的数值检查缓存中是否已经存在该AssetBundle文件,如果是指相同则证明AssetBundle文件已经保存在本地磁盘中,直接从本地磁盘进行读取,如果数值不同则证明AssetBundle没有保存到本地磁盘中,然后它会继续从远程服务器下载AssetBundle文件
示例代码截图:
在这里插入图片描述

从下载好的AssetBundle文件中加载资源

资源下载完成,就可以从下载好的资源文件中创建AssetBundle对象。可以通过AssetBundle类提供的三个不同的静态方法实现。
在这里插入图片描述
如果要卸载资源:

AssetBundle.Unload
  • AssetBundle.Unload:有一个bool类型参数,表示是否影响已经创建出来的资源对象,如果传入false,则在资源包中还未解压的数据将会被卸载以释放内存,如果传入true,则不仅仅是未解压的数据将会被卸载,还包括从资源包中解压之后已经被创建的资源对象也会被销毁,这意味着游戏脚本中所有引用了这些资源的变量都会失去对这些资源的引用

示例的异步加载AB代码:
在这里插入图片描述
在这里插入图片描述

2.使用本地磁盘中的AssetBundle文件

Unity有一个特殊的文件夹——StreamingAssets文件夹。
该文件夹中的文件在生成特定平台的安装包时是不会被特殊处理的,因此AssetBundle便可以直接放在SteamingAssets文件夹中作为应用和游戏运行时动态加载的外部资源文件。
如果放在SteamingAssets文件夹中的AssetBundle文件是未经处理和压缩的完整的AssetBundle文件,则通过

AssetBundle.CreateFromFile

是最快的将目标AssetBundle文件加载的方式。
但是如果放在AssetBundle文件夹中的AssetBundle文件已经经过压缩,此时只能借助

WWW.LoadFromCacheOrDowenload 

方法来实现。

3.AssetBundle文件的平台兼容性

由于AssetBundle文件是基于项目工程的开发平台创建的,因此不同平台创建的AssetBundle文件就有可能会和应用或游戏的运行平台存在兼容性的问题。
例如:开发平台为IOS,但是运行平台是Android,那么IOS平台下创建的AssetBundle文件就不能在Android平台上被正确读取。
在这里插入图片描述

4.AssetBundle如何识别资源

资源打包成AssetBundle文件之后,我们在从AssetBundle文件里面拿资源的时候,应该如何识别哪个是我们需要的资源呢。
Unity默认的解决方案为在打包时只考虑资源的名称。
如:完整路径为“Assets/Textures/myTexture.png”,在AssetBundle文件中被简单识别为“myTexture”。
Unity也为开发者保留了恰当的灵活性来自定义标识,可以通过

BuildPipline.BuildAssetBundleExplicitAssetNames

在创建AssetBundle文件时为每个资源对象定义符合我们自己习惯的标识。
附上AI的解释:
在这里插入图片描述

  • 18
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值