【學習筆記】AssetBundle、xLua、熱更新(使用步驟)

一、AssetBundle

1、打包AssetBundle包

①以模型爲例,將模型拖爲預製體

②設置預製資源的ab包名稱和後綴(後綴自定義有混淆視聽的作用);文件名加“/”可以直接作爲文件夾管理,比如scene/sphere,這樣在打包後就會生成一個文件夾scene裏面存着sphere包

③創建打包ab包的Editor腳本(此腳本必須放在Editor文件夾內)

using UnityEditor;
using System.IO;

public class CaretAssetBundle {

    [MenuItem("Assets/Build AssetBundles")]
    static void BuildAssetBundles()
    {
        string dir = "AssetBundles";
        if (!Directory.Exists(dir))
        {
            Directory.CreateDirectory(dir);
        }
        BuildPipeline.BuildAssetBundles(dir, BuildAssetBundleOptions.None, BuildTarget.StandaloneWindows64);
    }
}

 

④然後在菜單欄Assets/Build AssetBundles下點擊即可生成ab包。

2、加載AssetBundle包

本地加載方式:在場景中創建一個腳本,運行時加載以下代碼,則可以本地加載ab包資源,可異步

	void Start () {
        AssetBundle ab = AssetBundle.LoadFromFile("AssetBundles/cube.unity3d");
        GameObject obj = ab.LoadAsset<GameObject>("Plane");//Plane爲cube.unity3d裏面的一個對象
        Instantiate(obj);

        //記載包裏面的所有對象
        //object[] objs = ab.LoadAllAssets();
        //foreach (Object item in objs)
        //{
        //    Instantiate(item);
        //}
    }

 

服務器加載方式:UnityWebRequest方式適用於5.x以後的版本,是WWW方式的升級版

IEnumerator WebLoadAB(){
        //服務器加載:使用UnityWebRequest
        string url = @"http://localhost/AssetBundles/cube.unity3d"; 
        UnityWebRequest request = UnityWebRequest.GetAssetBundle(url);
        yield return request.Send();
        AssetBundle ab = (request.downloadHandler as DownloadHandlerAssetBundle).assetBundle;

        //GameObject obj = ab.LoadAsset<GameObject>("Plane");
        //Instantiate(obj);
        object[] objs = ab.LoadAllAssets();
        foreach (Object item in objs)
        {
            Instantiate(item);
        }
}

 

manifest文件加載方式:可以加載所有所有包,也可以得到包的依賴

manifest文件中的CRC,是對應網絡出現異常的時候作爲判斷的,如果CRC碼對不上則沒有下載完成,文件缺失需要重新下載。

3、AssetBundle分組打包策略

①依賴打包:對於多個模型共用貼圖、材質資源的,減小ab包的大小非常有效;做法爲分別將模型、材質貼圖各自打包,比如有A模型、B模型,共用了C材質貼圖,那麼分別給ABC各自打包,總共打包了3個assetbundle包,在加載運行後,AB模型會自動關聯C資源。如下圖,右側的底下三個爲依賴打包,左側的沒有共享到貼圖材質打出來的包累計大小將更大。

4、AssetBundle的卸載

資源不使用時需要卸載掉,以釋放內存

二、xLua

待更。。。

三、熱更新

待更。。。

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