WWW缓存方式
缓存方式
使用WWW.LoadFromCacheOrDownload接口。AssetBundles将保存在本地设备的Unity的缓存文件夹中。WebPlayer 有50MB的缓存上限,PC/Mac/Android/IOS应有有4 GB的缓存上限。这种方式也是加载AssetBundle推荐的方式。我们使用这种方式来实践一下。在Scripts文件夹中新建脚本:
using System; using UnityEngine; using System.Collections; public class CacheBundle : MonoBehaviour { public static readonly string BundleURL = #if UNITY_ANDROID "jar:file://" + Application.dataPath + "!/assets/MyAssetBundles/shape/cube"; #elif UNITY_IPHONE Application.dataPath + "/Raw/MyAssetBundles/shape/cube"; #elif UNITY_STANDALONE_WIN || UNITY_EDITOR //我们将加载以前打包好的cube "file://" + Application.dataPath + "/MyAssetBundles/shape/cube";//由于是编辑器下,我们使用这个路径。 #else string.Empty; #endif //还记得吗?在cube这个AssetBundle中有两个资源,Cube1和Cube2 private string AssetName = "Cube2"; //版本号 public int version; void Start() { StartCoroutine(DownloadAndCache()); } IEnumerator DownloadAndCache() { // 需要等待缓存准备好 while (!Caching.ready) yield return null; // 有相同版本号的AssetBundle就从缓存中获取,否则下载进缓存。 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; GameObject cube = Instantiate(bundle.LoadAsset(AssetName)) as GameObject; cube.transform.position = new Vector3(1.5f, 0f, 0f); // 卸载加载完之后的AssetBundle,节省内存。 bundle.Unload(false); } //由于使用using语法,www.Dispose将在加载完成后调用,释放内存 } }
博主注:版本号可按天来,比如
int version;
version = DateTime.dayOfYears;
http://baizihan.me/2016/03/unity-assetbundle03/