转自:http://blog.csdn.net/poda_/article/details/50038117
AssetBundle 打包
using UnityEngine;
using System.Collections;
using UnityEditor;
/// <summary>
/// 脚本位置:Editor文件夹下
/// 脚本功能:打包
/// </summary>
public class CreateAssetBundle:Editor
{
//打包预制体
[MenuItem ("Assets/Build AssetBundle poda")]
static void BuildAssetsBundles ()
{
BuildPipeline.BuildAssetBundles (Application.dataPath + "/AssetBundles");
}
// 打包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();
}
}
AssetBundle 解包
using UnityEngine; using System.Collections; /// <summary> /// 脚本位置:需要加载物体的场景中任意物体上 /// 脚本功能:加载物体 /// </summary> public class LoadAssetBundle : MonoBehaviour { private string url; private string assetname; void Start () { url = "file://" + Application.dataPath + "/AssetBundles/player1.assetbundle"; // unity预制体名字 assetname = "poda"; StartCoroutine (Download ()); } IEnumerator Download () { WWW www = new WWW (url); yield return www; if (www.error != null) { Debug.Log ("下载失败"); } else { AssetBundle bundle = www.assetBundle; // 加载的是预设体的名字,不是打包的assetbundle的名字 Object obj = bundle.LoadAsset (assetname); Instantiate (obj,Vector3.zero,Quaternion.identity); // AssetBundle.Unload(false),释放AssetBundle文件内存镜像,不销毁Load创建的Assets对象 // AssetBundle.Unload(true),释放AssetBundle文件内存镜像同时销毁所有已经Load的Assets内存镜像 bundle.Unload (false); } // 中断正在加载过程中的WWW www.Dispose (); } }
解压场景
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 (); } }