
接触Unity的AssetBundle以来,确实觉得它很强大,所以本文是为了简明扼要地把握AssetBundle的整体入门有用的信息,但不会对每个项目进行深入探讨,只为粗略地理解并使用。
使用之前,需要了解几个步骤
AssetBundle就像一个Zip文件,简单地说,一次压缩并保存多个资产,并在使用它们时解压缩它们。
接下来我们需要了解构建AssetBundle,也是第一个步骤。
构建AssetBundle
无论如何,首先,需要将Assets压缩在一起,即构建AssetBundle,可以使用脚本构建AssetBundle,请从这里了解它。
AssetBundleBrowser无需编写脚本即可轻松尝试构建,请从这里了解它。
此外,AssetBundle还具有以下三种压缩设置。
名称 | 描述 |
LZ4 | 标准压缩设置 只有部分资产可以解压缩(部分解压缩) |
LZMA | 古老的压缩设置 无法进行部分解冻 |
未压缩 | 未压缩 |
其实大多数情况下,如果选择LZ4是没有问题的,最好了解压缩格式,因为它会出现在加载材质中。
下载AssetBundle
认为构建的AssetBundle通常会上传到服务器并在必要的时间下载,由于AssetBundle只是一个二进制文件,因此通常可以使用UnityWebRequest.Get
下载它。
下载的AssetBundle也使用File类正常写入磁盘,如果使用名为 DownloadHandlerFile 的 DownloadHandler,它将很好地编写。
还有一个APIUnityWebRequestAssetBundle.GetAssetBundle
是Unity官方特意为我们定制的。
如果通过此方式下载,AssetBundle将保存在Unity确定的文件夹中,如果磁盘上已存在AssetBundle,它将使用相同的API从磁盘读取数据。
它将处理麻烦的进程,例如版本控制,但是,无法添加自己的处理,例如加密。
以下是如何下载它的摘要。
接口 | 说明 |
UnityWebRequest.Get | 将AssetBundle下载为二进制数据 |
UnityWebRequestAssetBundle.GetAssetBundle | API用于管理从下载到磁盘的所有内容 |
加载AssetBundle
接下来,将下载的AssetBundle加载到磁盘内存中,有四种方法可以将其加载到内存中:
接口 | 说明 | 支持的下载方式 |
AssetBundle.LoadFromMemory AssetBundle.LoadFromMemoryAsync | 从内存加载 用于加密等 | UnityWebRequest.Get |
AssetBundle.LoadFromFile AssetBundle.LoadFromFileAsync | 从文件加载 | |
WWW.LoadFromCacheOrDownload | 一个旧的API(改用UnityWebRequestAssetBundle.GetAssetBundle) | * |
UnityWebRequestAssetBundle.GetAssetBundle 后跟下载处理程序,该处理程序在 AssetBundle 中获取 | UnityWebRequestAssetBundle.GetAssetBundle |
首先,需要注意的是,可以使用的加载方法会根据上一节中的下载方法而变化。如果使用UnityWebRequest.Get
下载它,则将使用AssetBundle.LoadFromMemory
或AssetBundle.LoadFromFile
。
此外,如果使用UnityWebRequestAssetBundle.GetAssetBundle
下载它,请使用相同的API进行加载。如果磁盘上存在AssetBundle,此API将获取它,如果磁盘上不存在,则下载它。
顺便说一句,WWW.LoadFromCacheOrDownload
已经过时了,所以不需要使用它。
从AssetBundle加载资产
加载AssetBundle后,需要从其中加载Asset,Asset使用AssetBundle.LoadAsset
加载。
请从这里了解AssetBundle.LoadAsset
。
AssetBundle之间的依赖关系
例如,假设一个游戏模型和它引用的材质存储在单独的AssetBundle中。在这种情况下,就形成了AssetBundle的依赖关系。
需要先加载材质的AssetBundle,然后再加载模型的AssetBundle。
AssetBundleManifest
构建AssetBundle时,将直接在构建的文件夹下创建与文件夹名称同名的AssetBundle,一个名为AssetBundleManifest的资产存储在其中。
AssetBundleManifest包含有关AssetBundle之间的依赖关系的信息和版本控制信息。
那么本文将对AssetBundleManifest不再进一步说明,有时间在做稍微详细地参考。
…
以上是3D天堂网关于介绍AssetBundle的全部内容,如果你有任何反馈,请随时在本页面下方留言。