Unity3D和Lua之間的相互調用

這篇筆記主要集中學習一下uLua和Unity3D之間相互調用的方法,我們導入了uLua之後,現在會彈出一個類似學習屏幕的東西,如下:

uLua學習筆記(三):Unity3D和Lua之間的相互調用

先贊一個!

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靜態數組,把我們新建的類添加進去,如下:

uLua學習筆記(三):Unity3D和Lua之間的相互調用

生成包裝文件

在使用之前我們需要先生成Unity可用的包裝文件,即把Unity3D的類和方法註冊到Lua中,這樣Lua才能進行調用。

幸運的是,這些文件不需要我們手動添加,只需要點擊菜單欄的“lua”->“Clear LuaBinder File + Warp Files”先清空上次生成的包裝文件,然後點擊菜單欄“lua”->“gen Lua Warp File”重新生成包裝文件即可。

我們會發現我們的類的包裝文件以及創建好了:

uLua學習筆記(三):Unity3D和Lua之間的相互調用

添加註冊信息

我們打開uLua\Lua\System\Wrap.lua文件,在最後添加我們新建的類,如下:

uLua學習筆記(三):Unity3D和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 }

運行結果如下:

uLua學習筆記(三):Unity3D和Lua之間的相互調用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章