初始項目搭建
- 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 # 是還實現了一些函數:
Yield、WaitForEndOfFrame等
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堆棧,和一些出錯情況。
以后細看。
