Version: 2017.3
public static Networking.UnityWebRequest GetAssetBundle (string uri, uint crc);
public static Networking.UnityWebRequest GetAssetBundle (string uri, uint version, uint crc);
public static Networking.UnityWebRequest GetAssetBundle (string uri, Hash128 hash, uint crc);
public static Networking.UnityWebRequest GetAssetBundle (string uri, CachedAssetBundle cachedAssetBundle, uint crc);

参数

uri 要下载的资源捆绑包的 URI。
crc 如果不是零,此数值将与下载的资源捆绑包数据的校验和进行比较。如果 CRC 不匹配,系统将记录一个错误且不加载资源捆绑包。如果设置为零,将跳过 CRC 检查。
version 整数版本号,将与要下载的资源捆绑包的缓存版本进行比较。增加此数值以强制 Unity 重新下载一个缓存的资源捆绑包。

类似于 WWW.LoadFromCacheOrDownloadversion 参数。
hash 版本哈希。如果此哈希与此资源捆绑包的缓存版本的哈希不匹配,则该资源捆绑包将会被重新加载。
cachedAssetBundle 用于将给定版本的资源捆绑包下载到自定义缓存路径的结构。

返回

UnityWebRequest 配置为下载 Unity 资源捆绑包的 UnityWebRequest。

描述

创建经过优化的 UnityWebRequest,以通过 HTTP GET 下载 Unity 资源捆绑包。

此方法创建一个 UnityWebRequest,将方法设置为 GET 并将目标 URL 设置为字符串 uri 参数。不设置其他标志或自定义标头。

此方法将 DownloadHandlerAssetBundle 附加到 UnityWebRequest。此 DownloadHandler 具有一个特殊的 DownloadHandlerAssetBundle.assetBundle 属性,在下载和解码足够的数据后,该属性可用于提取资源捆绑包,以允许访问捆绑包中的资源。

此外,DownloadHandlerAssetBundle 会将数据流式传输到环形缓冲区并在工作线程上解压缩数据,与一次性下载所有数据相比,节省了许多内存分配。

如果提供了一个整数 version 或 Hash128 hash 参数,DownloadHandlerAssetBundle 将使用资源捆绑包缓存系统。如果资源捆绑包已完成缓存且无需重新下载,那么 UnityWebRequest 将在资源捆绑包从缓存中完成加载后完成。

缓存的资源包仅由文件名和版本唯一标识。缓存过程将忽略 url 中的所有域和路径信息。由于缓存的资源捆绑包由文件名而非完整的 URL 标识,您可以随时更改资源捆绑包的下载目录。这对于推出新版本游戏并确保浏览器或 CDN 不会错误地缓存文件非常有用。

通常情况下,使用资源捆绑包的文件名生成缓存路径是没有问题的。但如果不同的资源捆绑包具有相同的最后文件名,则会发生缓存冲突。借助 CachedAssetBundle 结构,您可以使用 CachedAssetBundle.name 来自定义缓存路径,以避免缓存冲突。您还可以利用它来组织缓存数据结构。

注意:尽管您可以使用此 API 从本地存储中加载资源捆绑包(在 Android 上使用 file:// URI 或 jar:file//),但并不建议这样做,请改用 AssetBundle.LoadFromFileAsync

using UnityEngine;
using UnityEngine.Networking;
using System.Collections;

public class MyBehaviour : MonoBehaviour { void Start() { StartCoroutine(GetText()); }

IEnumerator GetText() { using (UnityWebRequest uwr = UnityWebRequest.GetAssetBundle("http://www.my-server.com/mybundle")) { yield return uwr.SendWebRequest();

if (uwr.isNetworkError || uwr.isHttpError) { Debug.Log(uwr.error); } else { // Get downloaded asset bundle AssetBundle bundle = DownloadHandlerAssetBundle.GetContent(uwr); } } } }