這篇筆記主要集中學習一下uLua和Unity3D之間相互調用的方法,我們導入了uLua之后,現在會彈出一個類似學習屏幕的東西,如下:
先贊一個!
Unity3D調用Lua
Unity3D調用Lua的方法還是比較簡單的,所以先說這個,由於這部分在學習筆記(一)中已經說的挺多的了,更多的內容點擊這里回去看,所以這里我們就來看一個簡單的示例即可:
1 using LuaInterface; 2 using UnityEngine; 3 4 public class UnityCallLua : MonoBehaviour 5 { 6 private string lua = @" 7 --兩個數相加 8 function add(a, b) 9 return a + b 10 end 11 --多返回值 12 function foo(a, b, c) 13 return a + b, b + c, a + c 14 end 15 "; 16 17 void Start() 18 { 19 //創建 lua 狀態對象 20 LuaState luaState = new LuaState(); 21 //運行腳本確保函數已經創建 22 luaState.DoString(lua); 23 //獲取函數 24 LuaFunction func = luaState.GetFunction("add"); 25 //調用函數 26 object[] result = func.Call(5.2f, 1.3f); 27 //打印結果 28 Debug.Log(result[0]); 29 30 //多返回值函數調用 31 func = luaState.GetFunction("foo"); 32 result = func.Call(5.2f, 1.3f, 2.8f); 33 for(int i = 0; i < result.Length; i++) 34 { 35 Debug.Log(result[i]); 36 } 37 } 38 }
將這個腳本綁定到場景攝像機機上運行即可查看結果。
Lua調用Unity3D
Lua調用Unity3D的方法實現上要稍微麻煩一點,具體有以下幾個步驟:
創建要被Lua調用的類
首先我們需要一個被Lua調用的類,如下:
1 using UnityEngine; 2 using System.Collections; 3 4 public class MyClass : MonoBehaviour 5 { 6 public static void MyFunc() 7 { 8 Debug.Log("Lua call MyFunc!"); 9 } 10 11 void Start() 12 { 13 } 14 15 void Update() 16 { 17 } 18 }
為了足夠簡單,就用一個打印信息的靜態方法。
綁定要被調用的類
打開uLua\Editor\BindLua.cs文件,找到binds靜態數組,把我們新建的類添加進去,如下:
生成包裝文件
在使用之前我們需要先生成Unity可用的包裝文件,即把Unity3D的類和方法注冊到Lua中,這樣Lua才能進行調用。
幸運的是,這些文件不需要我們手動添加,只需要點擊菜單欄的“lua”->“Clear LuaBinder File + Warp Files”先清空上次生成的包裝文件,然后點擊菜單欄“lua”->“gen Lua Warp File”重新生成包裝文件即可。
我們會發現我們的類的包裝文件以及創建好了:
添加注冊信息
我們打開uLua\Lua\System\Wrap.lua文件,在最后添加我們新建的類,如下:
開始調用
新建一個場景,把下面的腳本綁定到攝像機即可:
1 using LuaInterface; 2 using UnityEngine; 3 4 public class LuaCallUnity : MonoBehaviour 5 { 6 private string lua = @" 7 MyClass.MyFunc() 8 "; 9 10 void Start() 11 { 12 LuaScriptMgr luaMgr = new LuaScriptMgr(); 13 luaMgr.Start(); 14 15 LuaState luaState = luaMgr.lua; 16 luaState.DoString(lua); 17 } 18 }
運行結果如下: