Unity3D Slua绑定C#对象流程

通过对Slua绑定C#对象进行代码分析,写一点笔记加深理解

1.Slua绑定到lua脚本的关键文件:

    LuaBehaviour.cs:   

            component类,提供lua文件地址为参数,同时schema参数动态绑定成员变量,C#层交互

    MyLuaTable.cs

          lua对象的多一层封装,本身lua对象就在luaState文件里声明,这里应该是我所在项目自己做的

    LuaManager.cs:

          主要用于加载本地lua脚本,生成lua对象

   LuaState.cs:

          调用LuaDLL,生成luaTable,lua变量类型,调用lua方法,简而言之,封装了lua层的交互

2.流程:

LuaBehavior:

LuaBehavior->SetLua() 调用 LuaBehaviourBase基类的TryGetLuaTable() 获得MyLuaTable的实例,

MyLuaTable调用LuaManager单例 fetch(文件地址) ---》GetBytes():使用UnityEditor.AssetBase.loadAssetAtPath()载入lua文件,返回bytes文件数据

LuaManager->DoTable():调用LuaState.doBuffer()===》LuaDLL.lua_Pcall() 进行lua对象压栈 返回一个lua 表对象

最终过程是将这个lua表对象与插件LuaBehavior插件进行绑定

3.交互过程:

每个GameObject更新时调用对应的LuaBehavior脚本,脚本对象可以使用绑定好的成员变量gameObject 和transform,来获取场景里的对象,同时LuaBehaviour脚本绑定后会调用Awake(LuaBehaviour.SetLua()时调用),

Update和LastUpdate方法(LuaBehaviourBase->TryGetLuaTable()时调用,同时调用PushValues()绑定gameObject,transform,behaviour变量)

猜你喜欢

转载自blog.csdn.net/hookby/article/details/81808683