ulua+PureMVC框架简单热更新使用
前言
框架介绍
该框架由大牛骏擎【CP】 jarjin编写。据说最初作者只是为了让大家了解如何使用Ulua而制作了一个演示Demo,但后来很多人基于这个Demo开发游戏,这出乎了作者的意料。希望这个框架能越来越好,目前它是完全免费的。
- 官网地址:http://www.ulua.org/
- 论坛地址:http://bbs.ulua.org/
关键词解释
- Lua:可查看百度百科对lua的解释 ,简单来说,Lua可用于热更新,ulua是其一个版本。
- PureMVC:这是一个简单小型的MVC框架,具体可查看百度百科 ,该框架已集成此功能,本文仅介绍此框架与Unity之间的结合使用。
准备资源
框架下载地址:http://www.ulua.org/simpleframework.html ,下载Simple Framework Github地址选项中的SimpleFramework UGUI选项。
基础知识
- ulua/cstolua使用基础:http://bbs.ulua.org/dispbbs.asp?boardid=2&Id=27
- SimpleFramework NGUI/UGUI基础知识:http://bbs.ulua.org/dispbbs.asp?boardid=3&Id=24
正文
该工程基于Unity 5.0 + UGUI + cstolua构建,服务器端基于VS2012及其以上版本。若低于版本要求,可能会出现问题。下载完毕后,用Unity打开此工程文件,其目录结构如下:
1. 平台切换注意事项
打开login场景后,有一处容易出问题:需根据运行终端切换相应的平台,若在过程中切换平台,要注意部分文件的删除和重新生成。 以Android为例,切换Android平台的步骤如下:
- 点击Gen Lua Wrap Files生成相应lua基本脚本。打开Assets/uLua/Source/LuaWrap目录,可看到生成的文件,这些文件名或许会让你感到熟悉。
- 若要切换平台,需先删除这些LuaWarp文件。
- 选择相应的平台,选择好之后再重复上述步骤生成Wrap文件。
2. 生成资源文件
想要运行这个demo,还需生成相应的资源文件。若要切换平台,这里的文件也需要删除。可先查看生成后的样子,然后将这些文件删除即可。
3. 运行demo
- 点击运行程序。此框架提供的Demo中有服务器Socket监听按钮点击事件。服务器位于下载文件里,与Assets同级目录Server,打开
~\\SimpleFramework_UGUI-master\\Server\\Server\\bin\\Debug\\SuperSocket.SocketService.exe文件。 - 输入r开启socket服务器,本文热更新使用的是web服务器,这里仅演示demo中的服务器。
- 服务器启动之后,回到Unity重新启动游戏(先启动服务器再启动客户端)。
- 点击Button按钮,客户端会收到来自服务器端的信息,同时服务器端也会收到客户端的信息。
4. ulua脚本关系介绍
在项目的根目录下的Lua文件夹下几乎都是lua脚本,热更新时这些脚本都需要生成出来,并放置到web服务器端供更新,关于更新的具体细节可在论坛 查看。各目录介绍如下:
- Lua:框架自带的Lua源码目录,用户自定义的Lua脚本可放在这里。打包时,打包脚本会将其按目录结构生成到StreaminAssets目录,然后上传到游戏的Web服务器,用于供游戏客户端下载更新本地的Lua脚本,以实现热更。
- 3rd:存放第三方的一些插件lua、实例源码文件,如cjson、pbc、pblua、sproto等。
- Common:公用的lua文件目录,包含define.lua文件(用于变量声明、全局配置等)、functions.lua(常用函数库)、protocal.lua(通讯协议文件)。
- Controller:控制器目录,该操作类独立存活在Luavm中,不依赖于某一个Lua面板,主要用于操作数据、控制面板显示。
- Logic:存放一些管理器类,如GameManager(游戏管理器)、NetworkManager(网络管理器),可将新的管理器放到此目录。
- System:cstolua的系统目录,存放常用的lua类,为优化lua调用速度,用lua重写了unity常用类。
- View:面板的视图层,包含被Unity调用的面板的变量,遵循Unity GameObject的生命周期的事件调用。
5. 自定义lua脚本示例
以PromptCtrl和PromptPanel脚本为例,我们自己写的lua脚本可以此为模板。这里的写法类似于javaScript,这是因为在Lua文件夹下集成了一些方法,方便编写。 若自定义AdamCtrl放置于Controller文件夹下,按照模板构建自己的lua脚本,需修改以下几个文件:
- 打开define.lua脚本,为CtrlName添加AdamCtrl。
- 打开CtrlManager.lua,进行相应添加。
- 打开GameManager.lua脚本,进行相应修改。
是否需要Panel文件,可根据自身需求决定。至此,基本了解了如何将新的lua脚本加入到框架中,接下来看看如何进行热更新。
6. 发布可热更新的apk
- 首先将平台转换为Android平台,重新生成Wrap File的文件,删除StreamingAssets文件夹。这里热更新以demo中的例子为例,若界面显示出更新内容,说明热更新成功。打包资源需设置AssetBundleName才可以自动打包,例如对
Assets/Examples/Builds/Prompt/PromptPanel.prefab进行打包,不过本文暂不需要打包,先删除StreamingAssets文件夹。 - 打开Scripts/ConstDefine/AppConst.cs文件,进行相应修改。
- 生成的资源文件是Unity下StreamingAssets文件夹下的内容,将其直接拷贝到自己的web服务器即可。当然,下载这些文件需要有相应扩展名的权限。
- 生成apk,安装到手机即可。