|
下载assetbundles
本节假设你已经学会了如何建立资产包。如果你还没有,请看建筑assetbundles
有两种方式来下载资源包
非缓存。这是通过创建一个新的WWW的对象。在中是没有缓存到统一的缓存文件夹在本地存储设备。
缓存:这是通过使用www.loadfromcacheordownload呼叫。该资源包缓存到统一的缓存文件夹在本地存储设备。WebPlayer共享缓存允许多达50 MB的缓存的资源包。PC / Mac的独立应用程序和iOS和Android应用程序都有一个极限4 GB。网络播放器应用程序使用一个专用的高速缓存被限制在缓存许可协议中指定的字节数。请参阅脚本文档其他平台。
这是一个非缓存下载的一个例子:
using System;
using UnityEngine;
using System.Collections; class NonCachingLoadExample : MonoBehaviour {
public string BundleURL;
public string AssetName;
IEnumerator Start() {
// Download the file from the URL. It will not be saved in the Cache
using (WWW www = new WWW(BundleURL)) {
yield return www;
if (www.error != null)
throw new Exception("WWW download had an error:" + www.error);
AssetBundle bundle = www.assetBundle;
if (AssetName == "")
Instantiate(bundle.mainAsset);
else
Instantiate(bundle.LoadAsset(AssetName));
// Unload the AssetBundles compressed contents to conserve memory
bundle.Unload(false);
} // memory is freed from the web stream (www.Dispose() gets called implicitly)
}
}
推荐的方式是使用下载资源www.loadfromcacheordownload。。。。。。。例如:
using System;
using UnityEngine;
using System.Collections;
public class CachingLoadExample : MonoBehaviour {
public string BundleURL;
public string AssetName;
public int version;
void Start() {
StartCoroutine (DownloadAndCache());
}
IEnumerator DownloadAndCache (){
// Wait for the Caching system to be ready
while (!Caching.ready)
yield return null;
// Load the AssetBundle file from Cache if it exists with the same version or download and store it in the cache
using(WWW www = WWW.LoadFromCacheOrDownload (BundleURL, version)){
yield return www;
if (www.error != null)
throw new Exception("WWW download had an error:" + www.error);
AssetBundle bundle = www.assetBundle;
if (AssetName == "")
Instantiate(bundle.mainAsset);
else
Instantiate(bundle.LoadAsset(AssetName));
// Unload the AssetBundles compressed contents to conserve memory
bundle.Unload(false);
} // memory is freed from the web stream (www.Dispose() gets called implicitly)
}
}
当你访问资源包。属性,下载的数据提取和资源对象被创建。在这一点上,你准备加载包含包中的对象。第二个参数传递给LoadFromCacheOrDownload指定下载哪个版本的资源包。如果该资源不存在缓存中或有一个版本低于要求,LoadFromCacheOrDownload将下载的资源包。否则将从缓存中加载资源包。
请注意,只有一个资源包下载完成每帧时,下载www.loadfromcacheordownload。
全部放在一起
现在,组件的地方是你可以建立一个场景,将允许你加载资源包和屏幕上显示的内容。
最终的项目结构
首先要创建一个空的游戏对象GameObject->CreateEmpty。拖动cachingloadexample脚本到空的游戏你刚刚创建的对象。然后在bundleurl字段类型的URL你的资源包。我们已经把这个目录中的项目你可以复制文件的目录位置和添加前缀文件:/ /,例如文件:/ / C:/ unityprojects / assetbundlesguide /资产/资源/ cube.unity3d
现在你可以在编辑器中点击播放,你应该看到立方体从资源包加载预置。
在编辑器加载资源包
在编辑器中工作时要求必须建立和加载可以减缓发展过程。例如,如果一个资源包资产改良这将需要的资源加以改造和生产环境中它是最有可能的,所有的资源都建在一起,因此在更新一个资源包一个冗长的操作过程。更好的方法是在编辑,将负载的资产而不是直接加载它资源包有一个单独的代码路径。这样做可以使用resources.loadassetatpath(编辑)。
// C# Example
// Loading an Asset from disk instead of loading from an AssetBundle
// when running in the Editor
using System.Collections;
using UnityEngine;
class LoadAssetFromAssetBundle : MonoBehaviour
{
public Object Obj;
public IEnumerator DownloadAssetBundle<T>(string asset, string url, int version) where T : Object {
Obj = null;
#if UNITY_EDITOR
Obj = Resources.LoadAssetAtPath("Assets/" + asset, typeof(T));
yield return null;
#else
// Wait for the Caching system to be ready
while (!Caching.ready)
yield return null;
// Start the download
using(WWW www = WWW.LoadFromCacheOrDownload (url, version)){
yield return www;
if (www.error != null)
throw new Exception("WWW download:" + www.error);
AssetBundle assetBundle = www.assetBundle;
Obj = assetBundle.LoadAsset(asset, typeof(T));
// Unload the AssetBundles compressed contents to conserve memory
bundle.Unload(false);
} // memory is freed from the web stream (www.Dispose() gets called implicitly)
#endif
}
}
|
|