您的位置:首页 > 移动开发 > Unity3D

[unity3d]Assetbundle使用示例2(支持多平台)

2013-11-03 18:40 495 查看
支持多平台的Assetbundle的应用示例,贴代码,供学习!

这里不同平台的StreamingAssets是不同的,所以我们要写预处理!

using UnityEngine;
using System.Collections;

public class RunScript : MonoBehaviour
{

//不同平台下StreamingAssets的路径是不同的,这里需要注意一下。
public static readonly string PathURL =
#if UNITY_ANDROID
"jar:file://" + Application.dataPath + "!/assets/";
#elif UNITY_IPHONE
Application.dataPath + "/Raw/";
#elif UNITY_STANDALONE_WIN || UNITY_EDITOR
"file://" + Application.dataPath + "/StreamingAssets/";
#else
string.Empty;
#endif

void OnGUI()
{
if(GUILayout.Button("Main Assetbundle"))
{
//StartCoroutine(LoadMainGameObject(PathURL + "Prefab0.assetbundle"));
//StartCoroutine(LoadMainGameObject(PathURL +  "Prefab1.assetbundle"));

StartCoroutine(LoadMainCacheGameObject(PathURL + "Prefab0.assetbundle"));
StartCoroutine(LoadMainCacheGameObject(PathURL +  "Prefab1.assetbundle"));
}

if(GUILayout.Button("ALL Assetbundle"))
{
StartCoroutine(LoadALLGameObject(PathURL + "ALL.assetbundle"));
}

if(GUILayout.Button("Open Scene"))
{
StartCoroutine(LoadScene());
}

}

//读取一个资源

private IEnumerator LoadMainGameObject(string path)
{
WWW bundle = new WWW(path);

yield return bundle;

//加载到游戏中
yield return Instantiate(bundle.assetBundle.mainAsset);

bundle.assetBundle.Unload(false);
}

//读取全部资源

private IEnumerator LoadALLGameObject(string path)
{
WWW bundle = new WWW(path);

yield return bundle;

//通过Prefab的名称把他们都读取出来
Object  obj0 =  bundle.assetBundle.Load("Prefab0");
Object  obj1 =  bundle.assetBundle.Load("Prefab1");

//加载到游戏中
yield return Instantiate(obj0);
yield return Instantiate(obj1);
bundle.assetBundle.Unload(false);
}

private IEnumerator LoadMainCacheGameObject(string path)
{
WWW bundle = WWW.LoadFromCacheOrDownload(path,5);

yield return bundle;

//加载到游戏中
yield return Instantiate(bundle.assetBundle.mainAsset);

bundle.assetBundle.Unload(false);
}

private IEnumerator LoadScene()
{
WWW download = WWW.LoadFromCacheOrDownload ("file://"+Application.dataPath + "/MyScene.unity3d", 1);
yield return download;
var bundle = download.assetBundle;
Application.LoadLevel ("Level");
}

}


截图:



关于Unity3D,我们有个专门技术讨论的大群,可以进行技术交流和咨询,群号:858550
欢迎进行技术讨论,里面有不少大牛
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: