这篇笔记主要集中学习一下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 }
运行结果如下: