Unity Asset Bundle的基本操作流程

1.Asset Bundle

  • 序列化文件(Serialized file):一般用於存儲預製體、模型、材質等在遊戲場景中渲染以後才能看見的東西
  • 源文件(Resource file):一般用於存儲圖片、聲音等隨時可以看見的文件

2.指定Asset Bundle標籤

 

這是屬性面板右下角的面板,左邊的輸入框可以設置包的名稱,可以用“/”來劃分目錄,如:“mat”或者“resources/mat”,右邊的輸入框代表包的後綴,比如:u3d。

3.構建Asset Bundle目錄

  • 新建一個腳本,這裏取名爲ABTest(這個腳本一定要放在Editor目錄下)
  • 寫代碼
using UnityEditor;
using System.IO;

public class ABTest
{
    //創建菜單欄選項
    [MenuItem ("Tools/Asset Bundles/Build AssetBundles")]

	static void BuildAssetBundle()
    {
        //相對於工程文件夾的路徑
        string path = "Asset Bundles";

        //判斷路徑是否存在,不存在則創建
        if (!Directory.Exists(path))
        {
            Directory.CreateDirectory(path);
        }

        //構建Asset Bundle包
        BuildPipeline.BuildAssetBundles(path, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows);
    }
}

 

  • 代碼解析

MenuItem這個程序集引用是在菜單欄中產生“Tools/Asset Bundles”並在之後產生一個“Build AssetBundles’按鈕,只要點擊這個按鈕就可以執行下面的方法。

Path路徑是“Asset Bundles”,這是相對於工程文件夾的路徑(注意:不是相對於Asset目錄的路徑),因爲我們只需要它在編輯器中執行就可以了,所以無需繼承MonoBehaviour並放到場景中。

構建Asset Bundle的核心代碼:

BuildPipeline.BuildAssetBundles(path,BuildAssetBundleOptions.None,BuildTarget.StandaloneWindows64);

path是構建的Asset Bundle包保存的路徑,BuildTarget是打包的平臺,這個一定要注意,比如你要打包到安卓平臺,一定要寫BuildTarget.Android。BuildAssetBundleOptions以後再解釋,現在就這樣寫。

4.上傳的服務器

  • 我們接下來是在本地操作,上傳到服務器有時間再說。

5.載入Asset Bundle

  • 新建一個腳本,這裏取名爲ABSet吧
  • 還記得我們之前創建的材質嗎?它叫“pige_mat“(爲什麼要提這個?之後你就知道了)。

    在場景中新建一個立方體,取名爲“CubePrefab“,記住這個名字,然後把“pige_mat”這個材質賦予給“CubePrefab”,做成一個預製體(那麼預製體的名字就叫“CubePrefab“了)。

  • 寫代碼
using UnityEngine;

public class ABSet : MonoBehaviour
{
	void Start ()
    {
        //載入的Asset Bundle包的路徑,精確到文件名(帶後綴)
        AssetBundle ab1 = AssetBundle.LoadFromFile("Asset Bundles/resources/mat.u3d");
        AssetBundle ab2 = AssetBundle.LoadFromFile("Asset Bundles/resources/prefab.u3d");

        //把Asset Bundle作爲GameObject載入
        ab1.LoadAsset<GameObject>("pige_mat");
        GameObject cube =ab2.LoadAsset<GameObject>("CubePrefab");

        //實例化對象
        Instantiate(cube);
	}
}
  • 代碼解析
  • 從Asset Bundle解壓文件的核心代碼

    AssetBundle.LoadFromFile("路徑");

    注意該路徑一定要保證完整,連後綴名都要記住,該方法返回的值是AssetBundle,所以用一個AssetBundle類型的變量來存儲它。

    ab.load<類型>(“文件名”)

    遊戲場景中的物體類型以GameObject爲主,文件名注意不是Asset Bundle包的名稱,而是原來文件的名稱,建議這些文件在工程完成之前不要刪除,否則忘記名字就麻煩了。

  • 補充
  • 最後把這個腳本掛在遊戲場景中的物體上,如果要一次性解壓包裏的所有文件,可以用ab.LoadAllAsset(),這時用Object數組來存儲它,然後遍歷Object數組使得它們都實例化。

接下來的內容將會在下篇博文分享

https://blog.csdn.net/ultramansail/article/details/89053790

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章