[2]自定義Lua解析方式

畅知發表於2024-05-06

[2]自定義Lua解析方式

在上文中我們學會學會更改載入路徑,載入對應資料夾下的Lua指令碼。

預設解析載入的lua指令碼存在的檔案位置非AB包或者Resources資料夾下往往不能隨包體更新,這顯然不符合熱更需要。因此自定義繼承

tolua中lua指令碼載入解析類LuaFileUtils來重寫對應的lua指令碼載入方法。

 public class LuaCustomLoad:LuaFileUtils
    {
        /// <summary>
        /// 優先從AssetBundle中載入(預設AB檔名稱為lua) Resources資料夾下lua資料夾載入
        /// </summary>
        /// <param name="fileName"></param>
        /// <returns></returns>
        public override byte[] ReadFile(string fileName)
        {
            //字尾名稱檢查處理
            if (!fileName.EndsWith(".lua"))
            {
                fileName += ".lua";
            }
            //二進位制檔案流
            byte[] buffer = null;
            
            //解析路徑名稱
            string[] tempFilePath = fileName.Split('/');
            Debug.Log(tempFilePath[tempFilePath.Length - 1]);
            TextAsset luaText = LoadAssetBundleManager.Instance().LoadResource<TextAsset>("lua",tempFilePath[tempFilePath.Length - 1]);
            if (luaText != null)
            {
                buffer = luaText.bytes;
            }
            //從Resources資料夾下載入Lua指令碼
            if (buffer == null)
            {
                Debug.Log("從Resources資源包中載入");
                string filePath = "Lua/" + fileName;
                //讀取檔案
                TextAsset textAsset = Resources.Load<TextAsset>(filePath);
                if (textAsset != null)
                {
                    buffer = textAsset.bytes;
                    //解除安裝資源
                    Resources.UnloadAsset(textAsset);
                }
            }
            return buffer;
        }
    }

將lua指令碼打入Resorces資料夾下(.lua檔案)

img

測試:此時還未將Lua指令碼打入AssetBundle包 所以從Resources資料夾下載入lua指令碼。(報錯是因為AssetBundle檔案不存在!後期可以完善此lua檔案載入指令碼邏輯)

image-20240505231011403

現在我們將lua指令碼打入AssetBundle中

此處踩坑:Lua指令碼打入AB包失敗!將lua指令碼字尾新增 [.txt] ,打包之前將toLua指令碼清空。

image-20240505231519714

測試使用自定義指令碼要點:

在使用LuaState之前先例項化自定義的載入方法:

image-20240505235459972

這樣,繼承的LuaFileUtils的自定義類會呼叫其建構函式,將子類例項化的this賦值給instance,從而執行子類重寫的ReadFile方法。

img

測試程式碼:

image-20240505235825015

相關文章