• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

uLua学习笔记(三):Unity3D和Lua之间的相互调用

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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

先赞一个!

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 }

运行结果如下:


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
fedora26下安装 lua发布时间:2022-07-22
下一篇:
广博带你玩esp8266-WIFI芯片(一)(lua开发)--构建固件,刷入固件 ...发布时间:2022-07-22
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap