lua按钮unity_uLua学习笔记(三):Unity3D和Lua之间的相互调用

这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下:

09e1a55f25beb03f94e31f0ea0221da4.png

先赞一个!

Unity3D调用Lua

Unity3D调用Lua的方法还是比较简单的,所以先说这个,由于这部分在学习笔记(一)中已经说的挺多的了,更多的内容点击这里回去看,所以这里我们就来看一个简单的示例即可:

1 usingLuaInterface;2 usingUnityEngine;3

4 public classUnityCallLua : MonoBehaviour5 {6 private string lua = @"

7 --两个数相加8 function add(a, b)9 return a + b10 end11 --多返回值12 function foo(a, b, c)13 return a + b, b + c, a + c14 end15 ";16

17 voidStart()18 {19 //创建 lua 状态对象

20 LuaState luaState = newLuaState();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 usingUnityEngine;2 usingSystem.Collections;3

4 public classMyClass : MonoBehaviour5 {6 public static voidMyFunc()7 {8 Debug.Log("Lua call MyFunc!");9 }10

11 voidStart()12 {13 }14

15 voidUpdate()16 {17 }18 }

为了足够简单,就用一个打印信息的静态方法。

绑定要被调用的类

打开uLua\Editor\BindLua.cs文件,找到binds静态数组,把我们新建的类添加进去,如下:

a5298a663225a2ec27a0d383c9e2e0ea.png

生成包装文件

在使用之前我们需要先生成Unity可用的包装文件,即把Unity3D的类和方法注册到Lua中,这样Lua才能进行调用。

幸运的是,这些文件不需要我们手动添加,只需要点击菜单栏的“lua”->“Clear LuaBinder File + Warp Files”先清空上次生成的包装文件,然后点击菜单栏“lua”->“gen Lua Warp File”重新生成包装文件即可。

我们会发现我们的类的包装文件以及创建好了:

65600c9a7c73a5d660e08896e57a5bd0.png

添加注册信息

我们打开uLua\Lua\System\Wrap.lua文件,在最后添加我们新建的类,如下:

677dad06635d698ff3537640b921c5fd.png

开始调用

新建一个场景,把下面的脚本绑定到摄像机即可:

1 usingLuaInterface;2 usingUnityEngine;3

4 public classLuaCallUnity : MonoBehaviour5 {6 private string lua = @"

7 MyClass.MyFunc()8 ";9

10 voidStart()11 {12 LuaScriptMgr luaMgr = newLuaScriptMgr();13 luaMgr.Start();14

15 LuaState luaState =luaMgr.lua;16 luaState.DoString(lua);17 }18 }

运行结果如下:

bef771b280bc817eaa3b699f007bcfd2.png

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值