手游熱更新方案xLua開源:Unity3D下Lua編程解決方案


C#下Lua編程支持

xLua為Unity、 .Net、 Mono等C#環境增加Lua腳本編程的能力,借助xLua,這些Lua代碼可以方便的和C#相互調用。

xLua的突破

xLua在功能、性能、易用性都有不少突破,這幾方面分別最具代表性的是:

  • 可以運行時把C#實現(方法,操作符,屬性,事件等等)替換成lua實現;
  • 出色的GC優化,自定義struct,枚舉在Lua和C#間傳遞無C# gc alloc;
  • 編輯器下無需生成代碼,開發更輕量;

更詳細的特性、平台支持介紹請看這里

安裝

打開zip包,你會看到一個Assets目錄,這目錄就對應Unity工程的Assets目錄,保持這目錄結構放到你的Unity工程。

如果希望安裝到其它目錄,請看FAQ相關介紹。

lua5.3 vs luajit

xLua有兩個版本,分別集成了lua5.3和luajit,一個項目只能選擇其一。這兩個版本C#代碼是一樣的,不同的是Plugins部分。

lua5.3的特性更豐富些,比如支持原生64位整數,支持蘋果bitcode,支持utf8等。出現問題因為是純c代碼,也好定位。比起luajit,lua對安裝包的影響也更小。

而luajit勝在性能,如果其jit不出問題的話,可以比lua高一個數量級。目前luajit作者不打算維護luajit,在找人接替其維護,后續發展不太明朗。

項目可以根據自己情況判斷哪個更適合。因為目前lua53版本使用較多,所以xLua工程Plugins目錄下默認配套是lua53版本。

快速入門

一個完整的例子僅需3行代碼:

安裝好xLua,建一個MonoBehaviour拖到場景,在Start加入如下代碼:

XLua.LuaEnv luaenv = new XLua.LuaEnv(); luaenv.DoString("CS.UnityEngine.Debug.Log('hello world')"); luaenv.Dispose();

1、DoString參數為string,可輸入任意合法的Lua代碼,本示例在lua里調用C#的UnityEngine.Debug.Log打印了個日志。

2、一個LuaEnv實例對應Lua虛擬機,出於開銷的考慮,建議全局唯一。

C#主動調用lua也很簡單,比如要調用lua的系統函數,推薦方式是:

  • 聲明
[XLua.CSharpCallLua]
public delegate double LuaMax(double a, double b);
  • 綁定
var max = luaenv.Global.GetInPath<LuaMax>("math.max");
  • 調用
Debug.Log("max:" + max(32, 12));

建議綁定一次,重復使用。生成了代碼的話,調用max是不產生gc alloc的。

熱補丁

  • 侵入性小,老項目原有代碼不做任何調整就可使用。
  • 運行時影響小,不打補丁基本和原有程序一樣。
  • 出問題了可以用Lua來打補丁,這時才會走到lua代碼邏輯;

這里是使用指南。

更多示例

文檔

技術支持

QQ群:612705778 驗證答案:有問題先找FAQ

 

https://github.com/Tencent/xlua


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM