浅尝Unity 3D的Asset Bundle知识(五)-----缓存利用篇

首先小生自己庆祝一下上周小生的签证申请顺利通过了,第一次是自己做自己的担保人成功申请了签证。实在是非常的高兴。外加最近马上Swift2.0就要发布了,小生最近一直都在做一款关于汇率的App,用的就是Swift来开发的,真不知升级到IOS9之后是不是需要进行一番很大的改动(改动在所难免,但是知识需要与时具进嘛,加油!)。同样引申出来Unity不知道又要有什么变化了,虽说现在的系统几乎就是对软件支持向下兼容的,但是为了使用新的Api还有很多被替换掉的老的Api的发生,我想不管是原生App还是Unity的App都要进行一次脱胎换骨的洗礼吧。


小生在这两个方面还只是新手,所以对于小生这种初出茅庐的小菜鸟来说真是要有的忙了,但是毕竟这些都是后话了,现在Unity4还没用明白呢,还是赶快把眼前的知识打牢才是正经事儿不是,所以就让我们开始上周博客所谈及的话题吧-----Asset Bundle的缓存利用篇!(小生电脑也是有Unity5的,苦于只有4的Pro的license,将来有Unity5的license的时候对现在的知识进行一下升级的,还请各位看官多多包涵)


小生研究了一下关于使用缓存来保存下载后的AssetBundle的方法,发现缓存利用与否,打包的方式都是一样的(如果有看官还想了解下打包的知识,请参照小生的[打包篇])。正常如果只是下载文件而不进行保存的话是使用[new WWW(url)]来实现,而实用缓存的话就要利用另外一个方法了,那就是[WWW.LoadFromCacheOrDownload]这个方法了,要注意一点的是,这个方法不需要实例化,因为它是个静态方法。各位看官如果感兴趣的话,可以参照上一篇文章[基础打牢篇]中小生加入的代码片。


多余不说,先上一下总体的代码给各位看官!

using UnityEngine;
using System.Collections;

public class GameController : MonoBehaviour {

	private string assetBundleUrl = "http://127.0.0.1/AssetBundle/4/";

	// Use this for initialization
	void Start () {
		StartCoroutine(Download("Ball", 0));
	}
	
	// Update is called once per frame
	void Update () {
	
	}

	private IEnumerator Download(string assetBundleName, int version) {
		string filePath = assetBundleUrl + assetBundleName + ".unity3d";

		//Check the asset bundle file with version whether exist in cache of client
		if (Caching.IsVersionCached (filePath, version)) {
			Debug.Log("The file : " + filePath + "with version : " + version.ToString() + " is exist!");
		}
		else {
			Debug.Log("The file : " + filePath + "with version : " + version.ToString() + " is not exist!");
		}

		using (WWW www = WWW.LoadFromCacheOrDownload(filePath, version)) {
			yield return www;

			//Check the game object whether exist in asset bundle file 
			if (www.assetBundle.Contains(assetBundleName)) {
				GameObject gObject = www.assetBundle.mainAsset as GameObject;
				Instantiate(gObject);
			}
			else {
				Debug.Log("The game object : " + assetBundleName + "is not exist in asset bundle file!");
			}
			www.assetBundle.Unload(false);
		}
	}
}

从上面代码片可以看出,这里的要比之前不利用缓存的地方多了个version的整型参数,对,就是主要需要这个参数哦!这个version的参数就是起到了来判断是否需要重新下载的作用。简单的说,打包的时候是没有定义version的地方的,所以这个地方你需要自定义传入一个整数变量,比如说第一次下载的时候你给version传入0的话,如果你更新了服务器端的资源包后,但是你重新启动项目后如果没给这个version更新的话(比如说还是0)。这种情况下,客户端会认为关于这个资源包是没有更新的会直接去读取客户端缓存中的这个文件(如果缓存中这个文件不存在的话会重新下载)。反之你给version定义0以外的值的话,那就会重新下载这个asset bundle喽(前提是你定义的这个version值之前没有下载过)。


这样,缓存下载的Asset Bundle就这样简单的搞定喽!可能各位看官发现小生的代码片中还包含了其他的代码。嘿嘿,这个就留作预习之用喽,对于缓存利用的更多的知识小生会在下一篇的缓存利用进阶篇中和大家继续讨论(主要小生比较喜欢循序渐进地学习方式,所以还请各位看官多多包涵拍砖噢)。



你可能感兴趣的:(C#(Unity,3D),develop)