UniLua 是一个纯 C# 实现的 Lua 5.2,侧重于兼容性。
最朴素的从 C# 调用 lua 的一个全局函数的写法:
Lua.GetGlobal( "foo" ); // 加载 lua 中定义的一个名叫 foo 的全局函数到堆栈 Debug.Assert( Lua.IsFunction(-1) ); // 确保加载成功了, 此时栈顶是函数 foo Lua.PushString( "test" ); // 将第一个参数(字符串 "test")入栈 Lua.PushInteger( 42 ); //将第二个参数(整数 42)入栈 Lua.Call(2, 0); // 调用函数 foo, 指明有2个参数,没有返回值 // 上面的代码相当于 lua 里一个这样的调用 foo("test", 42)
稍微复杂一点的例子可以参考实例程序里的一些简单写法: 参考这个文件 Assets/Behaviour/LuaScriptController.cs:
示例代码:
// 创建 Lua 虚拟机 var Lua = LuaAPI.NewState(); // 加载基本库 Lua.L_OpenLibs(); // 加载 Lua 脚本文件 var LuaScriptFile = "framework/main.lua"; var status = Lua.L_DoFile( LuaScriptFile ); // 捕获错误 if( status != ThreadStatus.LUA_OK ) { throw new Exception( Lua.ToString(-1) ); } // 确保 framework/main.lua 执行结果是一个 Lua Table if( ! Lua.IsTable(-1) ) { throw new Exception( "framework main's return value is not a table" ); } // 从 framework/main.lua 返回的 table 中读取 awake 字段指向的函数 // 并保存到 AwakeRef 中 (可以将 AwakeRef 视为这个函数的句柄) var AwakeRef = StoreMethod( "awake" ); // 不再需要 framework/main.lua 返回的 table 了,将其从栈上弹出 Lua.Pop(1); //---------------------------------------------------- // 在需要的时候可以这样调用 AwakeRef 指向的 lua 函数 CallMethod( AwakeRef ); //---------------------------------------------------- // StoreMethod 和 CallMethod 的实现 private int StoreMethod( string name ) { Lua.GetField( -1, name ); if( !Lua.IsFunction( -1 ) ) { throw new Exception( string.Format( "method {0} not found!", name ) ); } return Lua.L_Ref( LuaDef.LUA_REGISTRYINDEX ); } private void CallMethod( int funcRef ) { Lua.RawGetI( LuaDef.LUA_REGISTRYINDEX, funcRef ); var status = Lua.PCall( 0, 0, 0 ); if( status != ThreadStatus.LUA_OK ) { Debug.LogError( Lua.ToString(-1) ); } }
Unity3d 中使用Lua之UniLua 方便动态更新游戏用。 开源项目地址:https://github.com/xebecnan/UniLua 最新支持到Lua5.2,C#版的Lua 基础用法: 大部分的使用是可以参考标准的 Lua 官方文档和 Lua 教程的。 Lua 本身的语法是一样的。C API 和 C# API 之间有个对应关系。例如 lua_pushnumber() 这个 C AP
Lua中文教程里面提到,C与Lua之间的通信关键在于一个虚拟的栈,几乎所有的API调用都是对栈上面的值进行操作!并且C与Lua之间的数据交换也都通过这个栈来完成 在Unity3D中的C#脚本中协同的用法与C#中的协同有不一样的语法规则 创造永远是需要想象力的,而我需要最快的速度熟悉这些API,把事情做的更快更好,而能限制我的,只有想象力,而不会因为我不熟悉API而无法做到 LU
LuaScriptController using System; using System.Collections; using UnityEngine; using UniLua; public class LuaScriptController : MonoBehaviour { public string LuaScriptFile = "framework/main.lua";
大约是2013年初,部分由于工作需要,部分由于个人的强烈兴趣,在云风大大的指导下,我使用 C# 编写了一套较为完整的 Lua 实现: UniLua ( GitHub - xebecnan/UniLua: A pure c# implementation of Lua 5.2 focus on compatibility with Unity ) 可惜后来由于工作调整,用纯 c 实现的 lua 就可
本文向大家介绍C#纯代码实现打字游戏,包括了C#纯代码实现打字游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了C#实现打字游戏的具体代码,供大家参考,具体内容如下 一、需求分析 1、界面设计 布局 需要哪些内容控件 容器的概念 集合的概念 2、开始游戏 字母的生成 26个字母 ASCII码值 字母的载体 控件 字母、位置、大小、颜色 要求随机的 计时器 3、字母从上往下运动 T
问题内容: gevent和eventlet将greenlet包用于异步IO。它被编写为C扩展,因此不适用于Jython或IronPython。如果性能无关紧要,那么在纯Python中实现greenlet API的最简单方法是什么。 一个简单的例子: 应该打印12、56、34(而不是78)。 问题答案: 自2.5版以来,内置于标准Python发行版中的协同例程可以实现这种目的。如果IronPytho
本文向大家介绍纯C语言实现火车售票系统,包括了纯C语言实现火车售票系统的使用技巧和注意事项,需要的朋友参考一下 这是好久之前写的一个火车售票系统, 写的非常粗糙, 后来也没改了, 希望遇见有缘人继续优化吧。 主要的功能是:设置车次,删除车次, 买票, 改签, 退票, 查询等。 更多学习资料请关注专题《管理系统开发》。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。
问题内容: 是否有GraphViz的开源Java替代品?我知道存在Grappa,它基本上将Graph接口包装为GraphViz作为JavaAPI。但是,布局仍由GraphViz二进制文件完成。 我正在寻找一个纯Java的开源库,它提供与GraphViz相同的功能和布局算法。 问题答案: 您可以看一下具有可视化和分析功能的JUNG(Java通用网络/图形框架)。它是开源的。
本文向大家介绍纯Javascript实现ping功能的方法,包括了纯Javascript实现ping功能的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了纯Javascript实现ping功能的方法。分享给大家供大家参考。具体实现方法如下: 希望本文所述对大家的javascript程序设计有所帮助。
问题内容: 在纯Javascript中有AAAX Post的任何实现(也许使用xmlhttprequest)吗? 例如,如果我有这样的表格: 这是我在jQuery中对AJAX的实现 我可以在 不 使用jQuery的情况下做同样的事情吗?如果有可能, 如何 将上述jQuery代码实现为纯Java代码? 问题答案: 是的,当然有可能:) JS server.php 说明: 函数采用其类名称的形式元素并