关于LUA+Unity开发_toLua篇【一】

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

网上有许多的LUA与Unity插件,如toLua,uLua, sLua, xLua。 uniLua由于其复杂的集成使用过程,已经被主流所抛弃了。在对各个插件使用过之后,出此系列博客与大家分享一下心得。

前面两篇计划说说toLua的那些事。

toLua自己集成到项目里,下载地址:https://github.com/topameng/tolua

步骤如下:

  • 1.复制assets目录到项目里
  • 2.复制Unity5.x的Plugins到项目里

集成后的结构是这样的:

关于LUA+Unity开发_toLua篇【一】_第1张图片

 

然后,开始Examples里面内容的学习:

关于LUA+Unity开发_toLua篇【一】_第2张图片

大概介绍一下各个实例,

  • Helloworld,介绍了LuaState的生成,DoString以执行文件,Dispose来销毁。注意销毁前调用了CheckTop,用于检测LUA栈中是否还有未执行的指令。
  • ScriptsFromFile, 流程来说,首先生成一个虚拟机,再指定工作路径后,读取LUA文件内容来执行,使用DoFile和Require功能。
  • CallLuaFunction,较xLua来说就提供了多种形式了。这里简单说明一下:
    • 1.使用比较原始的方式,根据LUA的核心机制,使用pCALL指令将数据放LUA执行栈中,再从栈中取出。160751_XXkB_138823.png luaFunc.Invoke就是对此的封装
    • 2.使用 luaFunc.ToDelegate 直接创建一个函数委托句柄。
    • 3. 使用LUA虚拟机对象里的Invoke来实现调用,实现机制基本与1一样
  • AccessingLuaVariables,这里涉及LUA很实用的setmetatable函数,在脚本里首先生成了一个元表,再利用以下几种形式测试:
    • 1.使用LUASTATE虚拟机对象来直接取varTable中的内容。分别出了table数据和一个function数据并转为LuaFunction类型后直接可以进行调用。
    • 2.取成一个LuaTable对象以访问其成员值,由于定义了metatable,可以使用其创建一个元表的实例来访问,以可以直接获取metatable原型访问数据。
  • TestCoroutine,使用LUA的协程,使用于C#的协程类似,使用coroutine.start启动一个函数,coroutine.stop来停止协程函数,其中使用的coroutine.wait,coroutine.step在lua官方文档中可以查阅。
  • TestCoroutine2,桥接C#的协程,效率很低,不推荐。
  • TestLuaThread, lua的coroutine映射到C#中tolua的封装成luathread对象,resume来控制Lua中线程的运行。
  • AccessingArray,传递一个数据给Lua,在Lua做遍历读取
  • UseDictionary,字典的封装,这里需要将字典的类反射到Lua中。
  • AccessingEnum,枚举的使用,基于C#反射过去的类来操作。
  • 11_Delegate,这里实现将LUA中的普通函数转化成C#中可用的Delegate,这样可以实现如C#中按钮绑定某个LUA函数作为事件。
  • 12_GameObject,使用Unity内置相关的操作一个gameobject对象,这里不同的插件性能有区分,具网上的一些大佬统计效率,toLua在此方面表现是最好的。
  • 13_CustomLoader,自定义的一个LUA加载器,继承LuaClient类后,可以重写StartMain函数,以实现在界面运行时就执行一段Lua脚本。注意,这里使用的OnLoadFinished回调,因此会在awake和start前面,场景一加载进来就调用。
  • 14_Out,就是个在LUA中简单使用物理射线的例子。
  • 15_ProtoBuffer,使用ProtoBuffer的传输协议来与做为数据载体,此例中在LUA中也做实体进行解析处理。
  • 16_Int64,LUA5.3的新特性,默认是double处理数据,使用Int64可处理78962871035984074- 9223372036854775807范围的数据,此例使用lua的int64来处理。
  • 17_Inherit,使用LUA的.Extend 的形式扩展LUA对象操作。
  • 18_Bundle,使用WWW加载作为Assetbundle的lua文件。
  • 19_cjson,CJSON插件的使用。
  • 20_utf8,UTF8编码支持。
  • 21_String,LUA桥接C#字符串的操作。当然这里全用LUA自己的字符串也是可以的。
  • 22_Reflection,LUA中桥接C#的反射机制。
  • 23_List,LUA桥接C#的数组容器。
  • 24_Struct,关于C#中结构体如何桥接到LUA的示例。
  • Performance,测试一些常用操作的消耗。
  • TestErrorStack,TestOverload,操作栈测试

 

转载于:https://my.oschina.net/u/138823/blog/1606631

你可能感兴趣的:(关于LUA+Unity开发_toLua篇【一】)