牛骨文教育服务平台(让学习变的简单)
博文笔记

Asset Bundle

创建时间:2017-04-16 投稿人: 浏览次数:645
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();
    }

声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。