美文网首页
框架-LuaFramework(待写)

框架-LuaFramework(待写)

作者: 叫我颜先生 | 来源:发表于2018-09-03 16:28 被阅读0次

    简介

    从接触到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的核心目录

    流程

    流程.png

    自定义API

    1. 编写C#类(方法是静态的)

      public class Test {
      
       public static void Log()
          {
              Debug.LogError("----------");
          }
      }
      
    2. customsetting中添加类类型

      _GT(typeof(Test))

    3. 重新生成wrap文件,在新生成的TestWrap中有对应生成的Log方法

    4. 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

    https://blog.csdn.net/Momo_Da/article/details/52857219

    相关文章

      网友评论

          本文标题:框架-LuaFramework(待写)

          本文链接:https://www.haomeiwen.com/subject/ashiwftx.html