UniLua 纯 C# 实现的 Lua 5.2开源项目

我要开发同款
匿名用户2013年04月24日
80阅读

技术信息

开源地址
https://github.com/xebecnan/UniLua
授权协议
MIT

作品详情

UiLua是一个纯C#实现的Lua5.2,侧重于兼容性。

最朴素的从C#调用lua的一个全局函数的写法:

Lua.GetGlobal("foo");//加载lua中定义的一个名叫foo的全局函数到堆栈Debug.Assert(Lua.IsFuctio(-1));//确保加载成功了,此时栈顶是函数fooLua.PushStrig("test");//将第一个参数(字符串"test")入栈Lua.PushIteger(42);//将第二个参数(整数42)入栈Lua.Call(2,0);//调用函数foo,指明有2个参数,没有返回值//上面的代码相当于lua里一个这样的调用foo("test",42)

稍微复杂一点的例子可以参考实例程序里的一些简单写法:参考这个文件Assets/Behaviour/LuaScriptCotroller.cs:

Assets/Behaviour/LuaScriptCotroller.cs

framework/mai.lua

示例代码:

//创建Lua虚拟机varLua=LuaAPI.NewState();//加载基本库Lua.L_OpeLibs();//加载Lua脚本文件varLuaScriptFile="framework/mai.lua";varstatus=Lua.L_DoFile(LuaScriptFile);//捕获错误if(status!=ThreadStatus.LUA_OK){throwewExceptio(Lua.ToStrig(-1));}//确保framework/mai.lua执行结果是一个LuaTableif(!Lua.IsTable(-1)){throwewExceptio("frameworkmai'sreturvalueisotatable");}//从framework/mai.lua返回的table中读取awake字段指向的函数//并保存到AwakeRef中(可以将AwakeRef视为这个函数的句柄)varAwakeRef=StoreMethod("awake");//不再需要framework/mai.lua返回的table了,将其从栈上弹出Lua.Pop(1);//----------------------------------------------------//在需要的时候可以这样调用AwakeRef指向的lua函数CallMethod(AwakeRef);//----------------------------------------------------//StoreMethod和CallMethod的实现privateitStoreMethod(strigame){Lua.GetField(-1,ame);if(!Lua.IsFuctio(-1)){throwewExceptio(strig.Format("method{0}otfoud!",ame));}returLua.L_Ref(LuaDef.LUA_REGISTRYINDEX);}privatevoidCallMethod(itfucRef){Lua.RawGetI(LuaDef.LUA_REGISTRYINDEX,fucRef);varstatus=Lua.PCall(0,0,0);if(status!=ThreadStatus.LUA_OK){Debug.LogError(Lua.ToStrig(-1));}}

 

功能介绍

UniLua 是一个纯 C# 实现的 Lua 5.2,侧重于兼容性。 最朴素的从 C# 调用 lua 的一个全局函数的写法:
Lua.GetGlobal( "foo" ); // 加载 lu...

声明:本文仅代表作者观点,不代表本站立场。如果侵犯到您的合法权益,请联系我们删除侵权资源!如果遇到资源链接失效,请您通过评论或工单的方式通知管理员。未经允许,不得转载,本站所有资源文章禁止商业使用运营!
下载安装【程序员客栈】APP
实时对接需求、及时收发消息、丰富的开放项目需求、随时随地查看项目状态

评论