简介
从接触到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-lua
- sproto:云风大神新作,比pbc更小效率高
- common:公用的Lua文件目录,就是全局用
- define:包含变量声明,全局配置
- functions:常用函数库
- protocal:通讯协议
- controller:控制器目录,处理数据,控制面板显示
- logic:存放管理器类,新加的管理器可以放里面
- ctrlmanager:管理控制controller层,进而控制view层
- game:检索并require view文件夹下各个panel文件
- luaclass:New方法,构建类
- view:面板显示,走的是Unity GameObject的生命周期的事件调用
- events:eventlib事件系统
- 3rd:第三方插件
- Luajit:Lua编译器
- Scripts:框架的C#目录
- common:
- luabehaviour:
- lualoader:
- constdefine
- appconst:
- managername:
- noticonst:
- controller:
- framework:
- manager:
- network:
- objectpool:
- utility:
- view:
- common:
- ToLua:tolua的核心目录
流程
![](https://img.haomeiwen.com/i12172794/3a4e9d6e8eb7781e.png)
自定义API
-
编写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各不相同,因此不是特别统一,遇到此问题直接删除错误代码即可
网友评论