LuaFramework是tolua#(原ulua)的一个框架,框架已经实现了Lua脚本的更新操作。
我使用的框架是UGUI的版本,版本号1.0.7.386,Unity版本5.3.4。
1.场景
在main场景中,GameManager上挂载了Main.cs,脚本中就一行代码,用来启动框架。
AppFacade.Instance.StartUp();
来看AppFacade类
InitFramework()是在基类的构造函数中调用的,这个函数将START_UP命令与StartUpCommand绑定,而在StartUp()中发送了START_UP命令,因此StartUpCommand被执行。这里引出了PureMVC,实际上,LuaFramework使用的是作者精简后的PureMVC,详细可见:http://doc.ulua.org/article/ugui/simpleframework_038.html。我们只需要知道它是以消息机制来解耦模块间通讯的即可,比如上面的START_UP就是一条消息,发送消息后,之前绑定了该消息的模块中的Execute()函数会被执行。
StartCommand.cs
除了绑定一条命令,主要完成了各个Manager的初始化,并将它们添加到GameManager物体上,详见Facade.AddManager()。
GameManager.cs
StartCommand类中添加了GameManager类,GameManager主要用来完成lua文件的更新。
大致流程:解压资源-->更新资源-->资源更新完毕。
解压资源OnExtractResource()本质上是读取包体内资源并写入到persistentPath下,一般来说只在第一次打开游戏时触发。随后更新资源OnUpdateResource(),更新完成后OnResourceInited()-->OnInitialize()完成了lua部分的初始化。
LuaManager.cs
上面OnInitialize()中执行了LuaManager.InitStart(),主要关注StartMain(),这里加载了Main.lua,并执行Main.lua的Main(),注释里说Main()是lua逻辑的入口,这里还不清楚跟Game.lua中OnInitOK()有何区别,因为在GameManager.OnInitialize()中最后也同样执行了Game.lua中的OnInitOK()。
LuaManager.OpenLibs()是用于加载用到的lua库,例子中的前三项均为传输协议,实际使用时根据项目需要选其一即可。