using UnityEngine;
using System.Collections;
using UnityEditor;
/// <summary>
/// 脚本位置:Editor文件夹下
/// 脚本功能:打包
/// </summary>
public class CreateAssetBundle:Editor
{
// 打包unity场景文件
[MenuItem("Assets/Build AssetBundle Scene")]
static void MyBuild(){
// 需要打包的场景名字
string [] levels = {"Assets/2.unity"};
// 注意这里【区别】通常我们打包,第2个参数都是指定文件夹目录,在此方法中,此参数表示具体【打包后文件的名字】
// 记得指定目标平台,不同平台的打包文件是不可以通用的。最后的BuildOptions要选择流格式
BuildPipeline.BuildPlayer(levels, Application.dataPath+"/Scene.unity3d", BuildTarget.Android, BuildOptions.BuildAdditionalStreamedScenes);
// 刷新,可以直接在Unity工程中看见打包后的文件
AssetDatabase.Refresh();
}
}
using UnityEngine;
using System.Collections;
/// <summary>
/// 脚本位置:需要加载物体的场景中任意物体上
/// 脚本功能:加载物体
/// </summary>
public class LoadAssetBundle : MonoBehaviour
{
private string url;
private string assetname;
void Start ()
{
// 下载压缩包,写出具体的名字
url = "file://" + Application.dataPath + "/Scene.unity3d";
// unity预制体名字,即被打包的场景名字叫 2
assetname = "2";
StartCoroutine (Download ());
}
IEnumerator Download ()
{
WWW www = new WWW (url);
yield return www;
if (www.error != null) {
Debug.Log ("下载失败");
} else {
AssetBundle bundle = www.assetBundle;
Application.LoadLevel ("2");
print ("跳转场景");
// AssetBundle.Unload(false),释放AssetBundle文件内存镜像,不销毁Load创建的Assets对象
// AssetBundle.Unload(true),释放AssetBundle文件内存镜像同时销毁所有已经Load的Assets内存镜像
bundle.Unload (false);
}
// 中断正在加载过程中的WWW
www.Dispose ();
}
}
public string path;
public string file;
void Start()
{
StartCoroutine("Load");
}
IEnumerator Load()
{
string _path = "file:///" + Application.dataPath + "/" + path;
WWW www = WWW.LoadFromCacheOrDownload(_path, 1);
yield return www;
AssetBundle ab = www.assetBundle;
AssetBundleRequest request = ab.LoadAssetAsync(file);
yield return request;
GameObject prefab = request.asset as GameObject;
Instantiate(prefab, Vector3.zero, Quaternion.identity);
//clean
ab.Unload(false);
www.Dispose();
}