【Unity3D自学记录】AssetBundles的使用

 一共有两种方法下载AssetBundles数据资源:

第一种是无缓存:这种方法直接使用WWW类,下载完的数据不会在本地unity3d的缓存目录中进行保存。

第二种有缓存:使用WWW.LoadFromCacheOrDownload的方法,下载完的数据将在unity3d的本地缓存目录中进行保存。

Web浏览器通常允许缓存大小达到50MB,PC和MAC的本地应用,IOS和Android应用都允许缓存达到4GB大小。

官方提供缓存的服务,需要RMB的。很贵。基本不会买的。


首先建立AssetBundles

下面是创建.assetbundle文件的脚本

using UnityEngine;
using System.Collections;
using UnityEditor;

public class AssetBundleTest : Editor
{
	
	[MenuItem("Custom Editor/Create AssetBunldes Main")]
	static void CreateAssetBunldesMain ()
	{
        //获取在Project视图中选择的所有游戏对象
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
 
        //遍历所有的游戏对象
		foreach (Object obj in SelectedAsset) 
		{
			//本地测试:建议最后将Assetbundle放在StreamingAssets文件夹下,如果没有就创建一个,因为移动平台下只能读取这个路径
			//StreamingAssets是只读路径,不能写入
			//服务器下载:就不需要放在这里,服务器上客户端用www类进行下载。
			string targetPath = Application.dataPath + "/StreamingAssets/" + obj.name + ".assetbundle";
			if (BuildPipeline.BuildAssetBundle (obj, null, targetPath, BuildAssetBundleOptions.CollectDependencies)) {
  				Debug.Log(obj.name +"资源打包成功");
			} 
			else 
			{
 				Debug.Log(obj.name +"资源打包失败");
			}
		}
		//刷新编辑器
		AssetDatabase.Refresh ();	
		
	}
	
	[MenuItem("Custom Editor/Create AssetBunldes ALL")]
	static void CreateAssetBunldesALL ()
	{
		
		Caching.CleanCache ();
 

		string Path = Application.dataPath + "/StreamingAssets/ALL.assetbundle";
 
		
		Object[] SelectedAsset = Selection.GetFiltered (typeof(Object), SelectionMode.DeepAssets);
 
		foreach (Object obj in SelectedAsset) 
		{
			Debug.Log ("Create AssetBunldes name :" + obj);
		}
		
		//这里注意第二个参数就行
		if (BuildPipeline.BuildAssetBundle (null, SelectedAsset, Path, BuildAssetBundleOptions.CollectDependencies)) {
			AssetDatabase.Refresh ();
		} else {
			
		}
	}
	
	[MenuItem("Custom Editor/Create Scene")]
	static void CreateSceneALL ()
	{
		//清空一下缓存
		Caching.CleanCache();
		string Path = Application.dataPath + "/MyScene.unity3d";
		string  []levels = {"Assets/Level.unity"};
    	//打包场景
    	BuildPipeline.BuildPlayer( levels, Path,BuildTarget.WebPlayer, BuildOptions.BuildAdditionalStreamedScenes);
		AssetDatabase.Refresh ();
	}
	
}




   下面是不含缓存的代码:

using System;
using UnityEngine;
using System.Collections; 
public class Example : MonoBehaviour {
  public string URL;
  IEnumerator Start() {
  	WWW www = new WWW(URL);
        yield return www;
        AssetBundle bundle = www.assetBundle;
        Instantiate(bundle.mainAsset);
        bundle.Unload(false);
  
  }
}


   下面是含缓存的代码,系统建议利用WWW.LoadFromCacheOrDownload类进行下载:

using System;
using UnityEngine;
using System.Collections; 
public class Example : MonoBehaviour {
  public string URL;
  IEnumerator Start() {
  	WWW www = WWW.LoadFromCacheOrDownload(URL, 1);
        yield return www;
        AssetBundle bundle = www.assetBundle;
        Instantiate(bundle.mainAsset);
        bundle.Unload(false);
  
  }
}

CSDN博客真搞不懂啊。

下面都是什么东西啊。

 
 
 
 
 
 

















   

你可能感兴趣的:(unity3d)