从接触到Lua到现在差不多半年了,但对于Lua框架很多地方并不知道是如何实现的,只知道一直在写着游戏逻辑的Lua脚本。最近开始系统了解学习一下,不断扩充,充实自己。
ulua:老外写的,支持反射+wrap方式cstolua:蒙哥,基于ulua,更快tolua:虽然lua之前最快,但tolua#比ulua更快simpleFramework:基于ulua的框架luaFramework:基于tolua的框架刚开始总是对这几个名词弄混,正好整理一下
完整框架基本是这样的:
Editor: customsetting:添加需要导出注册到Lua的类型列表packager:资源打包 Examples:自带例子Lua:框架自带的Lua源码目录,用户自定义的Lua脚本放这里面,打包的时候会将其按照目录结构生成到StreamingAssets中,再上传到Web服务器上,达到热更。 3rd:第三方插件 cjson:json支持luabitop:让lua支持位运算pbc:云风大神早起对protobuf的解析库pblua:网上流传的Lua方案,基于protobuf的protoc-gen-luasproto:云风大神新作,比pbc更小效率高 common:公用的Lua文件目录,就是全局用 define:包含变量声明,全局配置functions:常用函数库protocal:通讯协议 controller:控制器目录,处理数据,控制面板显示logic:存放管理器类,新加的管理器可以放里面 ctrlmanager:管理控制controller层,进而控制view层game:检索并require view文件夹下各个panel文件luaclass:New方法,构建类 view:面板显示,走的是Unity GameObject的生命周期的事件调用events:eventlib事件系统 Luajit:Lua编译器Scripts:框架的C#目录 common: luabehaviour:lualoader: constdefine appconst:managername:noticonst: controller:framework:manager:network:objectpool:utility:view: ToLua:tolua的核心目录编写C#类(方法是静态的)
public class Test { public static void Log() { Debug.LogError("----------"); } }customsetting中添加类类型
_GT(typeof(Test))
重新生成wrap文件,在新生成的TestWrap中有对应生成的Log方法
Lua中调用Test.Log()
此处调用是用‘ . ’
Create not wrap ulua type…
这不是错误,警告你当前类没有生成wrap,用的反射,为了效率请将该类注册wrap
luaopen_pack, referenced from: "_lua_tocbuffer"
去掉LuaDLL.cs中报错函数声明,及其相关报错代码
Type UnityEngine.xxx does not contain a definition for xxx and no extension method xxx of type UnityEngine.xxx could be found (are you missing a using directive or an assembly reference
因为unity不同平台版本api各不相同,因此不是特别统一,遇到此问题直接删除错误代码即可
http://doc.ulua.org/article/ngui/simpleframework_base1.html
https://blog.csdn.net/Momo_Da/article/details/52857219