uLua Unity工作机制
?
基于ulua 1.25版本,開啟C#類型動態注冊.
一.? 步驟
在WrapFile.cs類中,使用_GT(typeof(XXX)), 注冊需要Wrap的C#類型
注冊的C#類型被包裝成BindType對象,在BindType構造函數里獲取注冊類型的類名,注冊給Lua的名稱,基類名稱,Wrap的文件名稱等信息,并保存在相應的BindType對象中.(這些是在WrapFile類創建時就生成的)
2. 執行編輯器腳本,生成Wrap的C#類, LuaBinder類,以及Wrap.lua文件.
執行編輯器腳本SimulatorRunScript,調用LuaBinding里的相關接口,LuaBinding里遍歷WrapFile中注冊的需要Wrap的C#類型,根據BindType里的信息,自動生成cs代碼文件,并且生成LuaBinder類和Wrap.lua文件.
3.以上是運行前的準備工作.點擊運行按鈕,運行項目
4.項目首先初始化LuaScriptMgr.cs類,該類初始化后會執行Global.lua代碼.
Global.lua首先require Wrap.lua文件,執行Wrap.lua文件中的代碼.
Wrap.lua是2步驟里生成的,其內容是import各種C#類型到Lua,由于ulua支持動態注冊C#類型.該類默認狀態下是import了所有的C#類型到Lua,可以根據性能需要,修改Wrap.lua的生成方式,減少其中不需要立刻import的類型,改為在首次使用時import.提高啟動效率.
通過import ‘XXX’ 可以把XXX類型注冊到Lua,其原理是在Lua.cs腳本里將import這一字段注冊到Lua的全局表中,并且將import綁定到C#中的LuaStatic.importWrap函數,因此Lua端執行import ‘XXX’之后,調用了C#的LuaStatic.importWrap函數,該函數從Lua棧中取出棧頂的XXX類型名,并調用了LuaBinder的Bind函數
LuaBinder也是在第2步中生成的類,其作用是注冊1步驟Wrap的類型到Lua,該類Bind函數,接收一個類型名,然后Switch該類型,得到該類型Wrap后的類,并調用Wrap類中的Register函數,將該類型的相關方法注冊到Lua,以供Lua端調用.
各Wrap類的Register函數通過調用LuaScriptMgr.RegisterLib函數,注冊到Lua,在RegisterLib函數里,為該類型的namespace的各級創建相應table并注冊到Lua端,以免類型的namespace在Lua端無法找到.例如System.IO.File會創建System,IO的table,以及File類型的table
二.? 需要注意的事情
共同學習,如有錯誤,請務必提出.
轉載請注明:http://www.cnblogs.com/xixidaguai/p/5556791.html
轉載于:https://www.cnblogs.com/wmalloc/p/5556791.html
總結
以上是生活随笔為你收集整理的uLua Unity工作机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 理解水平扩展和垂直扩展
- 下一篇: Linux常用命令总结之(五)alias