uLua学习笔记(三):Unity3D和Lua之间的相互调用
这篇笔记主要集中学习一下uLua和Unity3D之间相互调用的方法,我们导入了uLua之后,现在会弹出一个类似学习屏幕的东西,如下:
先赞一个!
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静态数组,把我们新建的类添加进去,如下:
生成包装文件
在使用之前我们需要先生成Unity可用的包装文件,即把Unity3D的类和方法注册到Lua中,这样Lua才能进行调用。
幸运的是,这些文件不需要我们手动添加,只需要点击菜单栏的“lua”->“Clear LuaBinder File + Warp Files”先清空上次生成的包装文件,然后点击菜单栏“lua”->“gen Lua Warp File”重新生成包装文件即可。
我们会发现我们的类的包装文件以及创建好了:
添加注册信息
我们打开uLua\Lua\System\Wrap.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之间的相互调用的更多相关文章
- C和Lua之间的相互调用
前面的话 第一次接触Lua是因为Unity游戏中需要热更,但是一直没搞懂Lua是怎么嵌入到别的语言中执行的,如何互相调用的.这次打算好好了解一下C跟lua是如何交互的 那么如何使用Lua语言? lua ...
- java之jvm学习笔记三(Class文件检验器)
java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...
- angular学习笔记(三十)-指令(5)-link
这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...
- Liunx学习笔记(三) 文件权限
一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...
- 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus
物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...
- iView学习笔记(三):表格搜索,过滤及隐藏列操作
iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- [Firefly引擎][学习笔记三][已完结]所需模块封装
原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读: 笔记三主要就是各个模块的封装了,这里贴 ...
- JSP学习笔记(三):简单的Tomcat Web服务器
注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...
随机推荐
- POJ 2455 - Secret Milking Machine
原题地址:http://poj.org/problem?id=2455 题目大意:给出一个N个点的无向图,中间有P条边,要求找出从1到n的T条通路,满足它们之间没有公共边,并使得这些通路中经过的最长的 ...
- fil_system_struct
/** The tablespace memory cache */ typedef struct fil_system_struct fil_system_t; /** The tablespace ...
- 试图从数据库 ‘UFData_001_2003' 中提取的逻辑页 (1:10720) 属于对象 '0',而非对象 'syscolumns'
数据库可以使用,可以备份,但对备份进行恢复时报错,使用sp_attach_db对两个物理文件进行连接时,报同样错误: 服务器: 消息 605,级别 21,状态 1,行 1 试图从数据库 ‘UFData ...
- Java Web编程的主要组件技术——Struts的高级功能
参考书籍:<J2EE开源编程精要15讲> Struts对国际化的支持 "国际化"(I18N)指一个应用程序在运行时能根据客户端请求所来的国家/地区.语言的不同显示不同的 ...
- 图解VS2010打包全过程
原文转自:http://blog.csdn.net/shan9liang/article/details/6957308 最近刚刚打包发布了用VS2010开发的一个收费系统,借此讲一讲打包过程,供大家 ...
- I.MX6 git patch
/********************************************************************** * I.MX6 git patch * 说明: * 之前 ...
- I.MX6 开机 闪红屏
/************************************************************************** * I.MX6 开机 闪红屏 * 说明: * 本 ...
- noip2002提高组题解
再次280滚粗.今天早上有点事情,所以做题的时候一直心不在焉,应该是三天以来状态最差的一次,所以这个分数也还算满意了.状态真的太重要了. 第一题:均分纸牌 贪心.(昨天看BYVoid的noip2001 ...
- FFMPEG视音频编解码零基础学习方法
在CSDN上的这一段日子,接触到了很多同行业的人,尤其是使用FFMPEG进行视音频编解码的人,有的已经是有多年经验的“大神”,有的是刚开始学习的初学者.在和大家探讨的过程中,我忽然发现了一个问题:在“ ...
- 为Fitnesse-20140630定制RestFixture代码
摘要:Fitnesse插件RestFixture在最新版Fitnesse输出测试结果为html文本,而非html.本博文记录RestFixture定制代码的过程. 准备开发环境 假定你已经正确安装JD ...