加载AssetBundle

作者:追风剑情 发布于:2014-7-23 0:11 分类:Unity3d

一、放几个资源在Assets/StreamingAssets/下

如图:

Stream0.png

二、DyScript.cs挂在ScriptPrefab.prefab上,然后把DyScript、ScriptPrefab、txt、tex打包成一个AssetBundle取名为ALL.assetbundle

三、新建个脚本并挂在场景中的任意一个物体上,脚本代码下如:

using UnityEngine;
using System;
using System.Collections;

public class WWWLoadTest : MonoBehaviour {

	int version = 1;

	void Start () 
	{
		StartCoroutine("LoadAssetBundle");
	}

	IEnumerator LoadAssetBundle()
	{
		while (!Caching.ready)
			yield return null;

		string url = streamingAssetsPath + "ALL.assetbundle";
		Debug.Log (url);
		using(WWW www = WWW.LoadFromCacheOrDownload (url, version)){
			yield return www;
			if (www.error != null)
				throw new Exception("WWW download had an error:" + www.error);
			AssetBundle bundle = www.assetBundle;

			Texture2D tex = bundle.Load("tex") as Texture2D;
			Debug.Log("tex="+tex);
			GameObject prefab = bundle.Load("ScriptPrefab") as GameObject;
			Debug.Log("prefab="+prefab);
			TextAsset txt = bundle.Load("txt", typeof(TextAsset)) as TextAsset;
			Debug.Log("txt="+txt.text);
			//DyScript dyScript = prefab.GetComponent<DyScript>();
			//dyScript.Trace();
			Component dyScript = prefab.GetComponent("DyScript");
			Debug.Log("dyScript="+dyScript);

			bundle.Unload(false);
		}
	}
	
	string streamingAssetsPath
	{
		get {
			string path = "";
			switch(Application.platform)
			{
			case RuntimePlatform.WindowsEditor:
			case RuntimePlatform.WindowsPlayer:
				path = "file://" + Application.streamingAssetsPath + "/";
				break;
			case RuntimePlatform.Android:
				path = "jar:file://" + Application.streamingAssetsPath + "!/assets/";
				break;
			case RuntimePlatform.IPhonePlayer:
				path = Application.streamingAssetsPath + "/Raw/";
				break;
			default:
				path = Application.streamingAssetsPath + "/";
				break;
			}
			return path;
		}
	}
}

三、运行脚本,输出日志:

Log0.png

从日志可知,已经成功从AssetBundle中提取出了tex.png, ScriptPrefab.prefab, DyScript.cs, txt


四、从目录下删除资源,此时目录如图:

Stream1.png

五、再次运行脚本,输出日志:

Log1.png

从日志可知,tex.png, ScriptPrefab.prefab, txt成功提取,但挂在ScriptPrefab上的脚本DyScript.cs已经丢失。


结论:脚本文件不会被编译进AssetBundle

标签: AssetBundle

Powered by emlog  蜀ICP备18021003号   sitemap

川公网安备 51019002001593号