前言:
Lua
是個語法簡單的直譯語言,輕量且執行速度快(接近C語言),因此很適合當作崁入程式。
*注意: Lua陣列從1開始
更多介紹:
moonsharp
Lua轉譯套件,適用於C#、.NET、Unity...平臺。
以下內容基本的部分是學來自此教學影片:
載入Lua腳本
可以直接使用字串傳入。
使用Stream讀入腳本檔案
指派方法
假設目前有個管理UI的腳本:
我希望能用Lua指令設定UI上的文字,則可指派設定的方法給Lua腳本上的"SetText()"函數。
Lua腳本:
Lua Table
lua的物件資料都是儲存成字典型態。
例如使用table紀錄x,y,z:
C#設定table
Coroutine
現在有個以下Lua腳本,在開啟時會執行SetText("Happy"),接著等待直到呼叫繼續執行下一步。
C#使用:
先宣告MoonSharp的Coroutine類型
讀取文本
使用範例:
傳送Class
有時需要傳送一個自訂類別的資料,例如以下玩家資料:
使用範例:
將資料存在"State"變數內給Lua存取:
如此第一句會印出 Hi Lontoone! I'm a lua script
進階篇
模組化Lua
Lua可以透過引入其他腳本達到模組化管理。
可惜的是Unity的Moonsharp插件不能使用模組引入,至少我嘗試了好幾天都不成功,查到的可能原因是因為引入的路徑只能是系統環境變數路徑,但既然都要做模組化了,怎麼可能叫用戶把你的模組放在系統環境變數下?
我想的解決方案是做個註冊器去引入。例如我在Lua腳本宣告引入的變數
C#讀取array,附加特定模組
範例:以下是個物件的Lua腳本,當HP歸零時死亡並摧毀遊戲物件。
邏輯上gameobject資料並沒有傳給lua儲存,而是將該物件相關的方法委派給Lua。
最後實戰,將Lua腳本讀進可破壞的地形方塊:
當方塊hp歸零時,呼叫我定義的Map模組的ChangeSlot去修改地形,接著就交給Unity那邊處理了。
附錄:
- CLR、C#、Lua 數值對應MoonSharp 從一知到半解(1)_Shiheuan的博客-CSDN博客