久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

簡單總結(jié)AssetBundle的打包/解包

 文清陽 2017-05-26

最近參考了各位大神的資源,初步學(xué)習(xí)了Unity的資源管理模式,,包括在編輯器管理(使用AssetDatabase)和在運(yùn)行時(shí)管理(使用Resources和AssetBundle),。在此簡單總結(jié)運(yùn)行時(shí)用AssetBundle動(dòng)態(tài)打包/解包資源的方法,方便自己回顧,。

關(guān)于AssetBundle有很多的細(xì)節(jié)問題,,在此先作個(gè)筆記,等更多的問題搞清楚了/有了新的理解,,再接著補(bǔ)充/修改,。


創(chuàng)建編輯器菜單項(xiàng),用于打包AssetBundle

using UnityEngine;
using System.Collections;
using System.Collections.Generic; // 需要使用List集合
using UnityEditor; // 創(chuàng)建編輯器菜單項(xiàng)需要導(dǎo)入這個(gè)文件

public class CreateMenuItem  { // 不需要繼承Mono

    [MenuItem("My MenuItem/Build AssetBundle")]
    public static void BuildBundle() 
    {   
        List<AssetBundleBuild> list = new List<AssetBundleBuild>(); // 多個(gè)資源可以打入一個(gè)包中,,不確定個(gè)數(shù)時(shí),,可用List集合一個(gè)一個(gè)添加
        AssetBundleBuild b = new AssetBundleBuild();
        b.assetBundleName = "1.unity3d"; // 用于加載該資源,相當(dāng)于這個(gè)資源在AssetBundleBuild中的ID,,因?yàn)锳ssetBundleBuild中可能有多個(gè)資源
        b.assetNames = new string[] { "Assets/Resources/Images/1.jpg" }; // 這個(gè)AssetBundleBuild里包含的哪些資源
        list.Add(b);

        // 該方法不會(huì)自動(dòng)生成文件夾,,所以若指定的文件夾不存在,則打包失敗
        BuildPipeline.BuildAssetBundles("Assets/Bundles", list.ToArray(), BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

打包成功后,,在目標(biāo)文件夾下多了如下4個(gè)文件:
這里寫圖片描述

關(guān)于制作編輯器菜單項(xiàng)

  • 需要把該腳本放在Editor目錄下,,建議在Assets根目錄下新建“Editor”文件夾。
  • 需要導(dǎo)入U(xiǎn)nityEditor文件,。
  • 菜單項(xiàng)的類不用繼承MonoBehaviour,。
  • 需要使用MenuItem特性,。
  • 點(diǎn)擊菜單項(xiàng)觸發(fā)的函數(shù)是static靜態(tài)的。

關(guān)于打包AssetBundle

  • assetBundleName : 該資源打入包后的名字,,解包時(shí)可用該名字訪問到該資源,。
  • assetNames : 要被打包的資源當(dāng)前的相對(duì)路徑。
  • 打包函數(shù):BuildPipeline.BuildAssetBundles(),。
  • 打包函數(shù)要求傳入AssetBundleBuild[]數(shù)組,,因?yàn)橐粋€(gè)AssetBundle壓縮包中可以被加入多個(gè)資源,可以使用動(dòng)態(tài)數(shù)組List來替代(不用指定數(shù)組長度),,使用集合的Add()方法將資源一個(gè)一個(gè)加入包中,。
  • 關(guān)于參數(shù)BuildAssetBundleOptions,以前常用的選項(xiàng)BuildAssetBundleOptions.CollectDependencies和BuildAssetBundleOptions.CompleteAssets都已過時(shí),,官方文檔解釋是這兩種選項(xiàng)現(xiàn)在都默認(rèn)會(huì)被執(zhí)行,。關(guān)于這個(gè)參數(shù)我沒有過多的探究,這里暫時(shí)選用了BuildAssetBundleOptions.None,。
  • 方法的最后一個(gè)參數(shù)BuildTarget指定打包到哪個(gè)平臺(tái)下,,這里我用PC測(cè)試選擇BuildTarget.StandaloneWindows64。
  • 打包方法中填的目標(biāo)文件夾路徑如果不存在,,該方法不會(huì)創(chuàng)建該文件夾,,打包失敗。
  • 這里只是簡單的打包一個(gè)資源,,沒有涉及打包多個(gè)資源時(shí),,不同資源有共通引用別的資源的問題,學(xué)習(xí)中,。

加載/解包AssetBundle

public class LoadAssetBundle : MonoBehaviour {

    void Start () {
        StartCoroutine(Load());
    }

    // 加載AssetBundle壓縮包是個(gè)異步過程,,需要開啟協(xié)程
    IEnumerator Load()
    {
        // 步驟一:獲取AssetBundle壓縮包
        //  WWW www = new WWW("http://myserver/myBundle.unity3d"); // 從遠(yuǎn)端服務(wù)器下載
        //  WWW www = new WWW("File://" + Application.streamingAssetsPath + "1.unity3d"); // 手機(jī)上從本機(jī)加載
        WWW www = new WWW("File:///D:/Unity Projects/Learn Asset Manage/Assets/Bundles/1.unity3d"); // 從PC本機(jī)加載,是三個(gè)杠
        yield return www;

        AssetBundle build = www.assetBundle;
        Debug.Log(build); // 測(cè)試是否非空

        // 步驟二:解包獲取資源
        /*
        // 異步加載,,分幀操作
        AssetBundleRequest request = build.LoadAssetAsync("Assets/Prefabs/airplane.prefab", typeof(GameObject)); // 名字和類型是打包時(shí)確定的
        yield return request;
        GameObject go = request.asset as GameObject;
        */
        // 同步加載,,速度更快,但可能會(huì)阻塞主線程
        GameObject go = build.LoadAsset<GameObject>("Assets/Prefabs/airplane.prefab");


        Instantiate(go, new Vector3(0, 0, 0), Quaternion.identity);

        // 完成后釋放原始鏡像文件
        www.Dispose();
    }
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35

注意點(diǎn):

  • 加載AssetBundle壓縮包是個(gè)異步過程,,需要開啟協(xié)程,。
  • 壓縮包的獲取方式有三種:從遠(yuǎn)端服務(wù)器、手機(jī)上本地加載,、PC上本地加載,。想要在手機(jī)上加載本地AssetBundle,,需要將所需資源包存放在自創(chuàng)建的名為“StreamingAssets”的文件夾中,,該資源才能發(fā)布到真機(jī)上。參考Streaming Assets
  • 解AssetBundle包可以使用異步或同步加載方式,,前者分幀操作加載稍慢,,后者加載更快但可能阻塞主線程。
  • 解壓完成后可以通過www.Dispose()方法將原WWW的壓縮包鏡像文件釋放。

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,,所有內(nèi)容均由用戶發(fā)布,,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請(qǐng)點(diǎn)擊一鍵舉報(bào),。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多