Unity ToLua热更框架使用教程(1)

从本篇开始将为大家讲解ToLua在unity当中的使用教程。

Tolua的框架叫LuaFramework,首先附上下载链接:

https://github.com/jarjin/LuaFramework_UGUI_V2

这个地址的是UGUI的。

下载完之后导入项目,首先,我们要先让这个项目跑起来。

Unity ToLua热更框架使用教程(1)_第1张图片
首先点击Lua->Clear wrap files,清除所有wrap文件。

Unity ToLua热更框架使用教程(1)_第2张图片
然后点击LuaFramework->Build Windows Resource,打包ab资源。

Unity ToLua热更框架使用教程(1)_第3张图片
最后点击Lua->Generate All,重新生成wrap文件。

但是在我这里生成Wrap文件时出现了一个报错。

Unity ToLua热更框架使用教程(1)_第4张图片
经过调试之后发现是ParticleSystem该类生成wrap文件时出现的问题。

Unity ToLua热更框架使用教程(1)_第5张图片
所以把这行注释掉,重新操作一下就可以了。

然后点击运行。

Unity ToLua热更框架使用教程(1)_第6张图片
直到这里,我们的项目总算是跑起来了。

接下来,我们来看一下这个框架是如何运行的。

Unity ToLua热更框架使用教程(1)_第7张图片
在运行之前我们可以看到,场景中只有一个GameManager挂载了一个Main脚本,顾名思义,该脚本就是入口脚本。

Unity ToLua热更框架使用教程(1)_第8张图片
游戏一开始,调用一个StartUp函数。

Unity ToLua热更框架使用教程(1)_第9张图片
在StartUp当中又去调用了一个SendMessageCommand。

Unity ToLua热更框架使用教程(1)_第10张图片
该函数调用了m_controller的ExecuteCommand方法。

Unity ToLua热更框架使用教程(1)_第11张图片
这个m_controller是一个单例,当Facade被构造的时候创建的,而我们入口脚本当中的AppFacade类又是继承自Facade的。我们看到,当Facade类构造时,会调用InitFramework方法。

Unity ToLua热更框架使用教程(1)_第12张图片
所以当AppFacade构造时,就注册了一个StartUp的类型。

Unity ToLua热更框架使用教程(1)_第13张图片
将该枚举对应的类型注册进字典。

我们上面调用了m_controller的ExecuteCommand,我们可以看到,这个ExecuteCommand函数就是根据传进来的枚举去获取对应的类型,然后使用Activator.CreateInstance(commandType)去创建一个这种类型的实例,并且调用它的Execute方法。

Unity ToLua热更框架使用教程(1)_第14张图片
我们上面注册的时候,该枚举对应的类型是StartUpCommand。

Unity ToLua热更框架使用教程(1)_第15张图片

Unity ToLua热更框架使用教程(1)_第16张图片 

看到他的Execute方法。

这里添加了很多个管理器。

Unity ToLua热更框架使用教程(1)_第17张图片
他是怎么添加的呢,实际上这些管理器都是继承自Monobehaviour的,其实就是添加这些组件到GameManager对象上并存进字典当中。那么既然是Monobehaiour,那么这些管理器就肯定都有生命周期函数。我们先看到GameManager。

Unity ToLua热更框架使用教程(1)_第18张图片
在Awake当中调用了初始化方法Init。然后释放资源。然后热更新,对比files文件等等一系列的操作,大家可以顺着往下看,代码太长不截图了,最后我们会看到他执行到了这个方法。

Unity ToLua热更框架使用教程(1)_第19张图片
OnInitialize这个方法,LuaManager.DoFile("Logic/Game");  这句代码,加载Logic文件夹下的Game这个lua文件。这个Game文件可以说是Lua脚本的入口脚本了。可以看到上面的代码,它调用了Game脚本的OnInitOK函数来驱动lua脚本。

Unity ToLua热更框架使用教程(1)_第20张图片
OnInitOK该函数中,他去初始化一些View脚本和Ctrl脚本,这里就可以看出来,其实Tolua是采用MVC思想的。

看到InitViewPanels方法,他去加载PanelNames表的所有脚本。其实就是加载View文件夹下的视图层脚本。

那么视图层脚本的代码就可以使用了。反正Game这个脚本就是一个lua的入口脚本,具体大家要怎么做都可以。就是这么个流程。本篇就先讲这么多。

你可能感兴趣的:(unity教程,unity,游戏引擎)