在Unity中下载和保存AssetBundle的方法有很多种,有时真不知道该用哪一种。因此,本文总结了用Unity下载AssetBundle的所有方法。
使用DownloadHandlerBuffer
第一种方法是使用UnityWebRequest.Get()
来处理通信、处理下载。使用默认的DownloadHandlerBuffer,可通过这里了解DownloadHandlerBuffer。
这个方法在下载完成时可以得到AssetBundle作为字节阵列。
using (var request = UnityWebRequest.Get(url)) {
yield return request.SendWebRequest();
if (request.isHttpError || request.isNetworkError) {
yield break;
}
var data = request.downloadHandler.data;
// 因为能得到字节序列作为assetbundle研究则assetbundle.loadfrommemory
var assetBundle = AssetBundle.LoadFromMemory(data);
}
磁盘写入使用File类或FileStream,虽然是最通用的下载方法,但是和以后的方法相比没有优化。
使用DownloadHandlerFile
接下来,将DownloadHandler换成专门保存文件的方式,使用这个处理程序的话连刻录到磁盘都能做。
另外,因为接收到数据的顺序每次进行写入对存储器也温柔。
using (var request = UnityWebRequest.Get(url)) {
// 把DownloadHandler换成文件用的
request.downloadHandler = new DownloadHandlerFile(savePath);
yield return request.SendWebRequest();
if (request.isHttpError || request.isNetworkError) {
yield break;
}
// 因为已经写入到磁盘上了,所以可以通过AssetBundle.LoadFromFile获取
var assetBundle = AssetBundle.LoadFromFile(savePath);
}
因为无法使用Unity为我们准备的缓存机制,所以我们需要自制缓存,加密等Unity不支持的实现可以自由的优点。
可通过这里了解DownloadHandlerFile。
使用DownloadHandlerAssetBundle
UnityWebRequest.Get()
取而代之的是UnityWebRequestAssetBundle.GetAssetBundle
代替使用方法也有。
使用这个的话,AssetBundle会被保存到Unity管理的保存处。另外,如果保存的是AssetBundle,就不用下载,直接从那里获取。
using (var request = UnityWebRequestAssetBundle.GetAssetBundle(url)) {
yield return request.SendWebRequest();
if (request.isHttpError || request.isNetworkError) {
yield break;
}
// 将处理程序强制转换为 DownloadHandlerAssetBundle
var handler = request.downloadHandler as DownloadHandlerAssetBundle;
var assetBundle = handler.assetBundle;
}
UnityWebRequestAssetBundle的简单缓存机制,本文不做详细介绍,有时间下次单独介绍它。
使用自己的DownloadHandler
UnityWebRequeset的DownloadHandler可以自定义,也可以使用自制的DownloadHandler,就像官方的介绍的一样。
从这里了解它。
…
以上是关于下载AssetBundle方法的全部内容,如果你有任何反馈,请随时在本页面下方留言。