學習tolua#·20多個例子


初始項目搭建

  • clone官方庫
  • 新建unity工程
  • 依次把官方庫里的Assets和Unity5.x/Assets拷貝到項目Assets里

打開unity工程, 開始逐個學習例子,例子目錄:

1. hello world

  • 新建luaState
  • 執行字符串命令print ('hello tolua#')

unity的console里找到輸出結果(找的不是很容易呀)

2. run scripts from file

  • 添加源碼建search path
  • 讀取執行lua源文件

腳本內容

添加腳本搜索路徑到luaState里。

執行方法1,dofile:執行腳本內容

執行方法2,require:執行一次腳本內容

輸出結果

3. call lua function

  • lua加載執行代碼,定義函數
  • c#調用lua定義的函數
  • 釋放c#保存的lua函數

定義函數test.luaFunc


C#獲取lua的function

執行方式1:

源碼中說要少用,Call實現

執行方式2:和1差不多,對返回值特殊處理了

釋放:

4. c# access lua variable

  • c# 用 luaState來存取lua全局對象


5. lua coroutine

  • tolua #改寫了lua里的協程

6. lua coroutine

  • tolua # 是還實現了一些函數:YieldWaitForEndOfFrame

7. LuaThread

  • tolua # 把lua協程包裝成LuaThread,方便c#控制協程的執行。

8. lua access c# array

  • lua訪問c#的array

c#里構造一個array,通過函數傳參的方式傳給lua

lua里使用接口訪問c#的array

9. lua access c# Dictionary

  • lua讀寫c#的Dictinary

也是tolua#導出了一些接口,具體看例子就是了。
這個例子里有放置一個tolua#導出自定義c#類接口的樣例,可以看看。

10. lua access c# Enum

  • lua訪問c#的Enum,Enum在lua里可以獲得字符串名字,也可以轉成整數。

11. lua access c# delegate

  • lua訪問c#的delegate和event

12. lua access unity GameObject

  • lua訪問UnityEngine.GameObject

例子是在場景中不停的加白色粒子

代碼很簡單,生成一個gameobject,添加個粒子組件。

tolua#生成的LuaBinder.cs導出了大量的接口


13. 演示luaClient的使用

luaClient繼承MonoBehaviour。

14. lua 針對c#的out 類型參數處理

  • out類型參數,轉換成返回值,lua支持多個返回值。

c#里代碼

lua里代碼

15. 演示protobuf的使用

  • c#導出,c#自己使用
  • protoc-gen-lua生成,給lua使用。

16. 延時int64使用

  • tolua#提供了個int64的擴展庫,把int64分成兩個int32了。

17. tolua模擬繼承

例子里使用tolua.setpeer擴展包裝transform。能夠提升性能。


這樣獲取transform的position時,就不用每次都從tramsform里查找position屬性了。


20萬次賦值,耗時統計對比

使用方式 耗時/ms
c# 20.7
lua extend 46.0
lua 160

18. 將lua打包成資源包使用

  • 菜單命令Lua/build bundle files not jit,先打包輸出到/Assets/StreamingAssets目錄
  • 使用assetBuddle和WWW加載資源。

    例子里是加載的本地資源

19. 使用cjson

  • tolua#集成了第三方庫cjson
    開啟

    使用例子

20. 使用utf8

  • tolua#擴展的utf8庫,使用的lua版本是5.1的,並沒有utf8的庫。

21. 使用C# string

  • lua使用c#的字符串

22. 使用反射

  • lua里使用c#的Reflection機制

反射理解:通過實例獲取類定義,或者通過字符串名字獲取類定義,然后調用獲得的類定義中的函數。
例子有些復雜,沒細看,應該用不到。

23. 使用C# List

例子太長,不看了。

24. 測試函數重載

C#支持重載函數,這個例子用於測試這個。
沒細看。

24. 一些性能測試的例子

里面的第一個例子是這種類型的

這個在lua里的耗時是c#里的8倍,可以優化成2倍。
見第17個例子。

25. 測試lua堆棧,和一些出錯情況。

以后細看。


免責聲明!

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



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