这篇笔记主要集中学习一下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之间的相互调用的更多相关文章

  1. C和Lua之间的相互调用

    前面的话 第一次接触Lua是因为Unity游戏中需要热更,但是一直没搞懂Lua是怎么嵌入到别的语言中执行的,如何互相调用的.这次打算好好了解一下C跟lua是如何交互的 那么如何使用Lua语言? lua ...

  2. java之jvm学习笔记三(Class文件检验器)

    java之jvm学习笔记三(Class文件检验器) 前面的学习我们知道了class文件被类装载器所装载,但是在装载class文件之前或之后,class文件实际上还需要被校验,这就是今天的学习主题,cl ...

  3. angular学习笔记(三十)-指令(5)-link

    这篇主要介绍angular指令中的link属性: link:function(scope,iEle,iAttrs,ctrl,linker){ .... } link属性值为一个函数,这个函数有五个参数 ...

  4. Liunx学习笔记(三) 文件权限

    一.文件权限 1.查看文件权限 (1)文件权限 在 Linux 中对于文件有四种访问权限,列举如下: 可读取:r,Readable 可写入:w,Writable 可执行:x,Execute 无权限:- ...

  5. 物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus

    物联网学习笔记三:物联网网关协议比较:MQTT 和 Modbus 物联网 (IoT) 不只是新技术,还是与旧技术的集成,其关键在于通信.可用的通信方法各不相同,但是,各种不同的协议在将海量“事物”连接 ...

  6. iView学习笔记(三):表格搜索,过滤及隐藏列操作

    iView学习笔记(三):表格搜索,过滤及隐藏某列操作 1.后端准备工作 环境说明 python版本:3.6.6 Django版本:1.11.8 数据库:MariaDB 5.5.60 新建Django ...

  7. Oracle学习笔记三 SQL命令

    SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)  

  8. [Firefly引擎][学习笔记三][已完结]所需模块封装

    原地址:http://www.9miao.com/question-15-54671.html 学习笔记一传送门学习笔记二传送门 学习笔记三导读:        笔记三主要就是各个模块的封装了,这里贴 ...

  9. JSP学习笔记(三):简单的Tomcat Web服务器

    注意:每次对Tomcat配置文件进行修改后,必须重启Tomcat 在E盘的DATA文件夹中创建TomcatDemo文件夹,并将Tomcat安装路径下的webapps/ROOT中的WEB-INF文件夹复 ...

随机推荐

  1. UVa 11584 Partitioning by Palindromes

    题意: 给出一个字符串,求最少能划分成多少个回文子串. 分析: d[i] = min{d[j] + 1 | s[j+1]...s[i]是回文串} d[i]表示前 i 个字符最少能分割的回文子串的个数 ...

  2. 全球最受欢迎的十大Linux发行版(图)

    帮助新的Linux用户在越来越多的Linux发行版中选择最合适的操作系统,是创建这个网页的原因.它列出了迄今为止最流行的10个Linux发行版(另外增加的是FreeBSD,到目前为止最为流行的BSD系 ...

  3. asp.net读excle的数据类型不统一取出空值问题

    如果表格里某列全是数字或是字符没问题,但如果混合了全是数字和部分字符就会有部分读取为空连接EXCEL方式如下 string strConn = "Provider=Microsoft.Jet ...

  4. busybox filesystem add ldd function

    /******************************************************************** * busybox filesystem add ldd f ...

  5. atoi&itoa

    char* itoa(int num,char*str,int radix) {/*索引表*/ char index[]="0123456789ABCDEFGHIJKLMNOPQRSTUVW ...

  6. Ejabberd源码解析前奏--管理

    一.ejabberdctl 使用ejabberdctl命令行管理脚本,你可以执行ejabberdctl命令和一些普通的ejabberd命令(后面会详细解说).这意味着你可以在一个本地或远程ejabbe ...

  7. C# new用法总结

    有一道这样的题:写出c#中new关键字的三种用法,思前想后挖空心思也只想出了两种用法,回来查了下msdn,还真是有第三种用法: 用于在泛型声明中约束可能用作类型参数的参数的类型,这是在Framewor ...

  8. Android性能调优

    本文主要分享自己在appstore项目中的性能调优点,包括同步改异步.缓存.Layout优化.数据库优化.算法优化.延迟执行等.一.性能瓶颈点整个页面主要由6个Page的ViewPager,每个Pag ...

  9. Android UI详解之Fragment加载

    使用Fragment的原因: 1. Activity间的切换不流畅 2. 模块化Activity,方便做局部动画(有时为了到达这一点要把多个布局放到一个activity里面,现在可以用多Fragmen ...

  10. 【PHP】Windows环境Hello World

    转自:http://www.cnblogs.com/wangkangluo1/archive/2011/07/19/2110943.html 一 下载 XAMPP下载地址: https://sourc ...