通过对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变量)