首页 技术 正文
技术 2022年11月15日
0 收藏 693 点赞 4,009 浏览 1540 个字

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

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

先赞一个!

Unity3D调用Lua

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

 using LuaInterface;
using UnityEngine; public class UnityCallLua : MonoBehaviour
{
private string lua = @"
--两个数相加
function add(a, b)
return a + b
end
--多返回值
function foo(a, b, c)
return a + b, b + c, a + c
end
"; void Start()
{
//创建 lua 状态对象
LuaState luaState = new LuaState();
//运行脚本确保函数已经创建
luaState.DoString(lua);
//获取函数
LuaFunction func = luaState.GetFunction("add");
//调用函数
object[] result = func.Call(5.2f, 1.3f);
//打印结果
Debug.Log(result[]); //多返回值函数调用
func = luaState.GetFunction("foo");
result = func.Call(5.2f, 1.3f, 2.8f);
for(int i = ; i < result.Length; i++)
{
Debug.Log(result[i]);
}
}
}

将这个脚本绑定到场景摄像机机上运行即可查看结果。

Lua调用Unity3D

Lua调用Unity3D的方法实现上要稍微麻烦一点,具体有以下几个步骤:

创建要被Lua调用的类

首先我们需要一个被Lua调用的类,如下:

 using UnityEngine;
using System.Collections; public class MyClass : MonoBehaviour
{
public static void MyFunc()
{
Debug.Log("Lua call MyFunc!");
} void Start()
{
} void Update()
{
}
}

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

绑定要被调用的类

打开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之间的相互调用

开始调用

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

 using LuaInterface;
using UnityEngine; public class LuaCallUnity : MonoBehaviour
{
private string lua = @"
MyClass.MyFunc()
"; void Start()
{
LuaScriptMgr luaMgr = new LuaScriptMgr();
luaMgr.Start(); LuaState luaState = luaMgr.lua;
luaState.DoString(lua);
}
}

运行结果如下:

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,082
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,556
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,406
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,179
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,815
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,898