简介

从接触到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事件系统
  • Luajit:Lua编译器
  • Scripts:框架的C#目录
  • common:
  • luabehaviour:
  • lualoader:
  • constdefine
  • appconst:
  • managername:
  • noticonst:
  • controller:
  • framework:
  • manager:
  • network:
  • objectpool:
  • utility:
  • view:
  • ToLua:tolua的核心目录

流程





lua代码框架 lua开发框架_python


流程.png


自定义API

  1. 编写C#类(方法是静态的)
public class Test {

 public static void Log()
    {
        Debug.LogError("----------");
    }
}
  1. customsetting中添加类类型
    _GT(typeof(Test))
  2. 重新生成wrap文件,在新生成的TestWrap中有对应生成的Log方法
  3. Lua中调用Test.Log()
    此处调用是用‘ . ’

报错解决

  1. Create not wrap ulua type…
    这不是错误,警告你当前类没有生成wrap,用的反射,为了效率请将该类注册wrap
  2. luaopen_pack, referenced from: "_lua_tocbuffer"
    去掉LuaDLL.cs中报错函数声明,及其相关报错代码
  3. 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