uLua学习之调用Lua函数(五)

前言

在我开始这个系列的第一篇文章中,我就提到了Lua脚本用来实现宿主脚本的配置性和扩展性。上节说到的调用外部Lua脚本就对应了它的两大特性之一的配置性,那么另一大特性如何来体现呢?这就要说我们今天的话题了:Lua函数。uLua插件是用来解决unity3d热更新的方案,在我们需要对宿主程序做一些局部逻辑上的修改时,Lua函数就变得至关重要。那么如何在uLua中来调用Lua函数呢,现在就来看看吧!我们将通过两个例子来了解如何调用Lua函数。

第一个例子

首先,这个例子的函数是非常简单的,所以我们就把它以字符串形式写到了C#脚本中,详细的过程已经十分明显地注释出来了,如下所示:

我们主要用LuaInterface中的LuaFunction这个类来处理相关的Lua函数。上面的函数很简单,主要是接受实参并输出值。结果如下所示:

可以明显地看到,传入Lua函数中的实参和Lua函数中的返回值被确实在C#脚本中反映了出来,调用函数成功。

第二个例子

这个例子和上面的有所不同,主要是传入了多个参数。Lua脚本是独立存在的,我们用上节说到的第一种方式来读取独立的Lua脚本,一些前面说过的内容就不再细说。Lua脚本如下:

然后在C#脚本中传入相关参数,并进行计算,将结果输出出来,C#脚本如下:

结果如下所示:

结束语

今天就先到这里吧。如果有什么错误纰漏之处,希望诸位大神能够批评指正,我将十分感激。如果喜欢我的文章,请多多支持,多多点赞。有什么建议,欢迎访问我的个人网站(http://chunqiuyiyu.sinaapp.com/),我们共同学习进步。下篇文章再见!

时间: 2024-10-30 21:25:24

uLua学习之调用Lua函数(五)的相关文章

C中调用Lua函数

我们先来看一个简单的例子: lua_State* L = NULL; // 内部调用lua函数 double f(double x, double y) { double z; lua_getglobal(L, "f"); // 获取lua函数f lua_pushnumber(L, x); // 压入参数x和y lua_pushnumber(L, y); if(lua_pcall(L, 2, 1, 0) != 0) error(L, "error running functi

cocos2d-x 3.0 在C++中调用lua函数(2)

个人觉得3.0里面, 在C++下面调用lua函数很不方便, 所以就扩展了一个类, 继承自LuaStack, 代码和使用方式如下: #ifndef __CC_LUA_STACKEX_H_ #define __CC_LUA_STACKEX_H_ #include "CCLuaStack.h" NS_CC_BEGIN class LuaStackEx : public LuaStack { public: void call_script_fun(const char* fun) { exe

C语言调用Lua函数

记得上学时,初中英文课本中,上网叫做surfing the internet,中文叫网上冲浪.那个时期,人们经常称互联网为赛博空间.如今工作了,大量的零碎时间用于上微博,知乎,QQ,这些碎片化的阅读让人读起来轻松,也能获取些粗浅的信息.然而它们是消耗时间的黑洞,时间就这样一分一秒地飞逝,年末的时候,知乎会告诉你回答了多少问题,阅读了相当于一部<红楼梦>那么多的文字.只是当你静下来一想,这些浅阅读并没给你带来有深度,系统的知识.在你的时间线上,两条相邻信息往往是八竿子也打不着的.而且你还时不时去

cocos2d-x 3.0 在C++中调用lua函数

代码用的是<cocos2d-x 3.0 在lua中调用自定义类>中的代码. 在上篇的基础上进行扩充. 写lua函数 local function process_packet(user_data) if user_data then user_data = tolua.cast(user_data, "user_data"); print (user_data:uid()); print (user_data:uname()); end end local ghall =

uLua 学习笔记 之一 lua脚本 打包与读取

最近要学习热更新,搜了下,选择了ulua这个插件,本人也是新人.对这个插件也是一知半解,不过幸好加了专门讨论这一块的群,这个群的技术氛围还是很浓重的,特别是已经形成了一套自己的lua学习框架.最近周末就抽空研究了一下. 群号这里分享一下给大家 Unity3D&uLua技术交流群 341746602 开始这篇我希望你对热更新有一定了解,并且对ulua有初步的尝试. 一.打包 lua的后缀是不被支持打包进assertbundle的,所以我们一般把 .lua后缀 变为.lua.txt 或者 .lua.

c++调用lua函数2中方式

http://my.oschina.net/kkkkkkkkkkkkk/blog/521496 上一篇 续集 .. 其中handler 通过手动改 tolua 生成的 cpp文件获取 .. void toLuaFunc::callLuaFunc(const char*ARG) { CC_ASSERT(handler > 0, "call lua func 's handle must bigger than 0"); /* 方法1   发送事件到lua cocos2d::Comm

C#调用LUA函数

using UnityEngine; using System.Collections; using LuaInterface; public class testLUACALL : MonoBehaviour { // Use this for initialization void Start () { LuaState S = new LuaState(); if (S == null) return; S.Start(); S.DoFile("test1.lua"); S.Do

C++调用LUA函数,可变参模板实现

代码: /// FUNCTION TEMPLATE: luax_vcall template<typename..._Args> inline void luax_vcall(const char* func, _Args...args); template<typename _Result, typename..._Args> inline _Result luax_vxcall(const char* func, _Args...args); /// TEMPLATE luax

Lua学习笔记--C调用Lua

Lua是一种嵌入式语言,可以很好的嵌入其他应用程序.lua为我们提供了一组灵活的C API,使C代码能够很好的与Lua进行交互.包括读写Lua全局变量,调用Lua函数,运行Lua代码,注册C函数反过来供Lua调用.简单的说,C能调用Lua,反过来Lua也能调用C.真的是灰常强大灵活的脚本!!现在,先来学习一下怎么用C调用Lua. 其实最简单的我们已经做过了,通过一个dofile,运行一个lua脚本文件. 一.栈 Lua与C的交互是通过一个虚拟栈进行的,这个栈对于Lua来说是严格的LIFO(后进先