軟件介紹XLua框架是騰訊研發的Lua開源插件,xLua為Unity、 .Net、 Mono等C#環境增加Lua腳本編程的能力,借助xLua,這些Lua代碼可以方便的和C#相互調用。
插件特性 總體 Lua虛擬機支持 Lua5.3 Luajit2.1 Unity3D版本支持 各版本均支持 平臺支持 windows 64/32 android ios 64/32/bitcode osx uwp webgl 互訪技術 生成適配代碼 反射 易用性 解壓即可用 開發期無需生成代碼 生成代碼和反射間可無縫切換 更簡單的無GC api 菜單簡單易懂 配置可以多份,按模塊劃分,也可以直接在目標類型上打Attribute標簽 自動生成link.xml防止代碼剪裁 Plugins部分采用cmake編譯,更簡單 核心代碼不依賴生成代碼,可以隨時刪除生成目錄 性能 Lazyload技術,避免用不上的類型的開銷 lua函數映射到c# delegate,lua table映射到interface,可實現接口層面無C# gc alloc開銷 所有基本值類型,所有枚舉,字段都是值類型的struct,在Lua和C#間傳遞無C# gc alloc LuaTable,LuaFunction提供無gc訪問接口 通過代碼生成期的靜態分析,生成*優代碼 支持C#和Lua間指針傳遞 自動解除已經Destroy的UnityEngine.Object的引用 擴展性 不用改代碼就可以加入Lua第三方擴展 生成引擎提供接口做二次開發 支持為如下C#實現打補丁 構造函數 析構函數 成員函數 靜態函數 泛化函數 操作符重載 成員屬性 靜態屬性 事件 Lua代碼加載 加載字符串 支持加載后立即執行 支持加載后返回一個delegate或者LuaFunction,調用delegate或者LuaFunction后可傳腳本參數 Resources目錄的文件 直接require 自定義loader Lua里頭require時觸發 require參數透傳給loader,loader讀取Lua代碼返回 Lua原有的方式 Lua原有的方式都保留 Lua調用C# 創建C#對象 C#靜態屬性,字段 C#靜態方法 C#成員屬性,字段 C#成員方法 C#繼承 子類對象可以直接調用父類的方法,訪問父類屬性 子類模塊可以直接調用父類的靜態方法,靜態屬性 擴展方法(Extension methods) 就像普通成員方法一樣使用 參數的輸入輸出屬性(out,ref) out對應一個lua返回值 ref對應一個lua參數以及一個lua返回值 函數重載 支持重載 由于lua數據類型遠比C#要少,會出現無法判斷的情況,可通過擴展方法來來調用。 操作符重載 支持的操作符:+,-,*,/,==,一元-,<,<=, %,[] 其它操作符可以借助擴展方法調用 參數默認值 C#參數有默認值,在lua可以不傳 可變參數 在對應可變參數部分,直接輸入一個個參數即可,不需要把這些參數擴到一個數組里頭 泛化方法調用 靜態方法可以自行封裝使用 成員函數可通過擴展方法封裝使用 枚舉類型 數字或字符串到枚舉的轉換 delegate 調用一個C# delegate +操作符 -操作符 把一個lua函數作為一個c# delegate傳遞給c# event 增加事件回調 移除事件回調 64位整數 傳遞無gc而且無精度損失 lua53下使用原生64位支持 可以和number運算 以java的方式支持無符號64位整數 table的自動轉換到C#復雜類型 obj.complexField = {a = 1, b = {c = 1}},obj是一個C#對象,complexField是兩層嵌套的struct或者class typeof 對應C#的typeof操作符,返回Type對象 lua側直接clone decimal 傳遞無gc而且無精度損失 C#調用Lua 調用Lua函數 以delegate方式調用Lua函數 以LuaFunction調用lua函數 訪問Lua的table LuaTable的泛化Get/Set接口,調用無gc,可指明Key,Value的類型 用標注了CSharpCallLua的interface訪問 值拷貝到struct,class Lua虛擬機 虛擬機gc參數讀取及設置 工具鏈 Lua Profiler 可根據函數調用總時長,平均每次調用時長,調用次數排序 顯示lua函數名及其所在文件的名字及行號 如果C#函數,會顯示這個是C#函數 支持真機調試
|