一共有两种方法下载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博客真搞不懂啊。
下面都是什么东西啊。