1. 程式人生 > >unity遊戲開發之ULua框架介紹(二)

unity遊戲開發之ULua框架介紹(二)

1.SimpleFramework框架配置檔案

(1)AppConst 檔案

   在AppConst.cs檔案中配置了很多專案開發過程中,需要使用到的“公共常量資訊”。指令碼內的常量都有中文備註。所在位置是:Scripts/ConstDefine/AppConst.cs。

   欄位用“const”關鍵字修飾,方法用“static”關鍵字修飾,該指令碼內所有的欄位,方法,在外部指令碼都可以使用“類名.xxxx”進行訪問使用。

作用和價值:

   該指令碼的作用類似於“總控制檯”,通過改變該指令碼內的資訊,就可以改變專案的一些核心狀態

(2)AppConst 檔案修改

   ExampleMode:在正式專案開發時,該常量需要修改成false,就是關閉示例工程,關閉之後,就可以把根目錄下的“Examples”刪除。

2.AssetBundle 檔案

(1)AB 打包命令

  Game 選單以及選單下的子命令是通過uLua\Editor\Packager.cs 編輯器擴充套件指令碼實現的。在我們執行完畢AB 打包命令後,在StreamingAssets 資料夾下,會出現3個後為“.assetbundle”的AB 包,這三個包就是Examples 示例工程需要使用到的AB 包。將AppConst 指令碼中的ExampleMode 修改為false,就不會再生成示例工程的AB 資源。

(2)生成自己的AB 包

  將專案資源中的某個預製體設定Asset Labels 資訊,然後使用Game 選單下的命令打包成AB 資源。會發現我們自己的AssetBundle 檔案無法打包成功。這時候我們就需要分析Packager.cs 編輯器擴充套件指令碼檔案。

分析結果如下:

①示例工程中的資源並沒有手動指定AssetLabels 資訊,而是在編輯器擴充套件指令碼內,使用程式碼的方式,動態指定AssetLabels 資訊,然後一個資源一個資源單獨打包成AB 包;

②如果想實現能打包我們自己的AssetBundle 資源,需要對該指令碼進行修改。需要對AppConst.ExampleMode 為假的情況進行程式碼處理:讓指令碼可以打包專案中所有指定了AssetLabels 資訊的遊戲物體為AB 包。

在打包AssetBundle 資源時,可能出現LuaWrap 資料夾下的指令碼檔案報錯的情況,解決方法步驟如下:先清空LuaWrap 檔案,然後生成AB 資源,最後再重新生成LuaWrap 檔案。

3.Lua 和files 檔案

(1)Lua 資料夾

StreamingAssets 下的lua 資料夾內的程式碼在打包AB 資源的時候,一塊複製過來的。在ULua 熱更新環境下,lua 檔案不會被打包成AB 資源,而是直接從伺服器端下載.lua 原生檔案到本地

(2)files.txt 檔案

在StreamingAssets 資料夾下有一個叫做files.txt 的文字檔案,這個檔案叫做:熱更新清單檔案作用類似於AssetBundle 原生的“目錄manifest 檔案”。

files 檔案內包含AB 包和Lua 檔案的路徑資訊,以及用於校驗的MD5 值。因為ULua 環境下,lua 指令碼不會打包成ab 包,也就意味著lua 指令碼檔案的資訊不會出現在“目錄manifest 檔案”中,但是我們熱更新的時候又需要知道更新哪些lua 檔案,所以說出現了這個files.txt 熱更新清單檔案。

4.Lua 邏輯指令碼

SimpleFramework 框架使用的是MVC 程式碼結構,View 資料夾:存放的是UI 功能面板的檢視相關指令碼;Controller 資料夾:存放的是UI 功能面板控制器相關指令碼。

(1)Panel 介面指令碼

   ①PromptPanel.lua :“主面板”的介面指令碼.

   ②MessagePanel.lua :“彈出資訊面板”的介面指令碼.

總結:

    ①這兩個指令碼都是和UI 介面相關的,本身沒有實際的程式碼邏輯,都是查詢當前UI 面板的一些遊戲物體或者元件,並且儲存它們的引用。

    ②可以把這兩個腳本當成“模板”,我們後續開發自己的專案的時候,可以參照這兩個指令碼的程式碼格式。

 

(2)Ctrl 控制器指令碼

   ①MessageCtrl.lua :“彈出資訊面板”的介面邏輯功能實現指令碼.

   ②PromptCtrl.lua:“主面板”的介面邏輯功能實現指令碼.

總結:

   ①這兩個Ctrl 指令碼是UI介面的邏輯處理指令碼,該指令碼主要用於例項化遊戲物體,處理遊戲物體本身的邏輯,並對遊戲物體內的按鈕繫結相關的事件處理方法。

   ②在Ctrl 指令碼中會訪問使用Panel 指令碼中查詢到的遊戲物體引用。

 

5.框架核心指令碼介紹

(1)C#核心指令碼

 ①框架入口[GlobalGenerator.cs]:在場景中有一個空物體,該物體上掛載了一個“GlobalGenerator.cs”指令碼。該指令碼字面意思理解是“全域性生成器”,它是ULua 熱更新框架的入口啟動指令碼。作用類似於VS 控制檯專案中的入口指令碼Program.cs。

  ②啟動命令[StartUpCommand.cs]:在ULua 框架啟動後,會執行到“StartUpCommand.cs”指令碼。這個指令碼的作用是給場景內的遊戲物體新增必備的管理器指令碼。

  ③ULua 框架執行後,會自動給“GameManager 遊戲物體”新增7 個管理器指令碼,這7 個管理器指令碼內,存放了大量的“可複用程式碼”。

  ④遊戲管理器[GameManager.cs]:這7 個管理器指令碼中,程式碼量最大的是GameManager.cs 指令碼。在開發過程中該指令碼也是我們最常操作的一個指令碼。熱更新框架中核心的“資源熱更新下載功能”就是在該指令碼內實現的。OnResourceInited()方法:C#與Lua 互動的入口。

(2)Lua 核心指令碼

遊戲管理器[GameManager.lua]:C#版本的GameManger.cs 中會載入Lua 版的GameManger.lua 指令碼。

LuaScriptPanel():返回一個名稱陣列.

OnInitOK():載入完View 資源後的回撥方法.

②控制器管理器[CtrlManager.lua]:用於管理Lua 環境中所有的Ctrl 型別的指令碼.只需要根據開發需求引入對應的Ctrl 檔案,並且往Init()方法中新增資料即可。

③定義[define.lua]:存放Lua 環境中的一些定義,只需要根據開發需求往CtrlName 表中新增資料即可。