Unity编程笔录--ulua+PureMVC框架简单热更新使用

ulua+PureMVC框架简单热更新使用

前言:

1:作者官网论坛

首先介绍的是这个框架是一位大牛  骏擎【CP】  jarjin   写的,据说原本是“非常多人不知道怎么使用Ulua,所以搞了个演示Demo”,可是这个初衷发生了变化,突然有一个天作者发现非常多人基于这个Demo去做游戏了。这出乎作者的意料。

在此希望这个框架会越来越好。

眼下为止这个框架是全然免费的。

官网地址:http://www.ulua.org/

近期刚刚开了一个论坛,大家不懂的能够去看看,论坛地址:http://bbs.ulua.org/

2:关键词解释

Lua:先看下百度百科里面对lua的解释:http://baike.baidu.com/link?url=NkoserYmDEvJUz4RA-Dny3h6NP9oCW7--MPfnuO4NsvF3647QEopcYBwxHvBqzXemZuDjiFEcGkUbJ4mr0Camq

看完之后就大概对lua有了一个理解了,简单来说就是用来热更新。ulua是当中的一个版本号。

PureMVC:这是简单小型的MVC框架,详细请看百度百科:http://baike.baidu.com/link?url=3KyH_hz5ZY6WOVCZZTjd8FtCckkxSFa320jF8HivQhVuDQv_RDY6U95HxmyJDNyb7CTMVRDbHyRcpGPWhwZ1s_

这个框架里面都集成了。

这里仅仅介绍此框架与Unity之间的结合使用。

3:准备资源:

框架下载地址:http://www.ulua.org/simpleframework.html 下载Simple Framework Github地址选项中的 SimpleFramework UGUI 选项。

4:基础知识:

ulua/cstolua使用基础:http://bbs.ulua.org/dispbbs.asp?boardid=2&Id=27

SimpleFramework NGUI/UGUI基础知识  boardid=3&Id=24">http://bbs.ulua.org/dispbbs.asp?

boardid=3&Id=24

正文:

该project基于Unity 5.0 + UGUI + cstolua构建

server端基于VS2012及其以上版本号。

假设低于版本号要求的话。可能会出现故障

完成下载后用Unity打开此project文件,

文件夹结构例如以下:

1:打开login场景后,有一个比較easy出问题的地方。你是以什么终端执行的就要切换对应的平台。假设其中切换平台,须要注意一些文件的删除和又一次生成。

以Android为样例:切换Android平台

点击Gen Lua Wrap Files生成对应lua基本脚本,打开Assets/uLua/Source/LuaWrap文件夹,你能够看到生成的一些文件。是不是这些文件的名称是否眼熟。

假设要切换平台,首先须要把这些LuaWarp删除掉

然后选择对应的平台。选择好之后再反复上面的步骤生成Wrap文件

2:想要执行这个demo,还须要一个步骤,生成对应的资源文件,

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

对应的。假设你要切换平台的话,这里的文件你也须要删除,先看下生成之后是什么样子

把这些文件删除了就可以。

3:点击执行程序

这是此框架给的Demo,并且还有serverSocket监听button点击事件。这里的server是在下载文件中,与Assets同级文件夹Server,打开

~\SimpleFramework_UGUI-master\Server\Server\bin\Debug\SuperSocket.SocketService.exe文件

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

输入r就开启socketserver了,我在这里热更新使用的webserver,会在后面介绍到。这里不过演示demo中的server

server启动之后。回到Unity又一次启动游戏(先启动server再启动client)

点击Buttonbutton就会收到来自server端的信息

看下server端

收到了client的信息。

4:先来简介ulua脚本之间的关系

在项目的根文件夹下的Lua文件夹下差点儿都是lua脚本,当热更新的时候这些都须要生成出来,然后放置到webserver端供更新。关于更新的详细细节在论坛里面有介绍:http://bbs.ulua.org/dispbbs.asp?boardid=3&Id=24

Lua:框架自带的Lua源代码文件夹。用户自己定义的Lua脚本也就是放在这里面,最后打包的时候,打包脚本会将其按文件夹结构生成到StreaminAssets文件夹里面去。然后在将其上传到游戏的Webserver上面,用于准备被每一个游戏client下载更新他们本地的Lua脚本。达到热更目的。

---3rd:里面是第三方的一些插件lua、实例源代码文件,比方:cjson、pbc、pblua、sproto等。

---Common:公用的lua文件文件夹,如define.lua文件。一些变量声明,全局配置等,functions.lua经常使用函数库,通讯的protocal.lua协议文件。

---Controller:控制器文件夹,它不依赖于某一个Lua面板,它是独立存活在Luavm中的一个操作类。操作数据、控制面板显示而已。

---Logic:文件夹里面存放的是一些管理器类,比方GameManager游戏管理器、NetworkManager网络管理器,假设你有新的管理器能够放到里面。

---System:这个文件夹是cstolua的系统文件夹,里面存放都是一些经常使用的lua类。为了优化lua调用速度,用lua重写的unity经常使用类。

---View:这是面板的视图层。里面都是一些被Unity调用的面板的变量,走的是Unity GameObject的生命周期的事件调用。

5:先来看看demo中的lua脚本,以PromptCtrl和PromptPanel脚本为例

咱们自己写的lua脚本能够以这两个脚本为模板

能够看到这里面的写法类似于javaScript,这是因为在Lua目录下集成了一些方法,这样写起来比較方便。

假设我们自己写,须要注意改动下面几个文件

比如自己定义AdamCtrl放置于Controller目录下。依照模板构建自己的lua脚本, 打开define.lua脚本。为CtrlName加入AdamCtrl

打开CtrlManager.lua,加入例如以下

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

打开GameManager.lua脚本,改动例如以下

有的时候须要Panel文件,有的时候不须要,看自己需求所定

到这里。基本上lua就几乎相同了,这是创建一个新的lua怎样增加到框架中。如今看看怎样进行热更新。

6:公布能够热更新的apk

首先把平台转换为Android平台,又一次生成Wrap File的文件,把StreamingAssets目录整个的删掉,这里热更新更新的是demo中的样例,界面上显示出来东西,就说明已经热更新出来了。

这里要涉及到打包资源的问题,打包的资源须要设置AssetBundleName才干够自己主动打包,比如Assets/Examples/Builds/Prompt/PromptPanel.prefab进行打包。

只是咱们如今不须要打包,先把StreamingAssets目录整个删掉。

打开Scripts/ConstDefine/AppConst.cs文件,改动例如以下

生成的资源文件就是Unity下StreamingAssets目录下的内容

然后生成apk。安装到手机就可以

好了,看下怎样生成资源文件

这里的资源文件前面也说了,须要打包的资源设置了AssetBundleName,生成的资源文件存储在StreamingAssets目录下,直接拷贝StreamingAssets目录下全部文件到自己webserver就可以。

当然。下载这些文件须要有些扩展名权限,比如

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center">

好了。累成狗了。假设有什么能够交流探讨的,能够加我QQ:503115254

转载请注明出处。

时间: 2024-12-14 07:26:17

Unity编程笔录--ulua+PureMVC框架简单热更新使用的相关文章

客户端热更新框架之UI热更框架设计(上)

什么是热更新,为什么需要热更新?热更新是目前各大手游等众多App常用的更新方式.简单来说就是在用户通过App Store下载App之后,打开App时遇到的即时更新.对于手游客户端来说,受到苹果审核的约束, 一次审核提交需要10~20天不等的等待时间.而这段时间开发进度依然会推进很多,一旦手游上线,第一个版本在玩家疯狂行为下,出点问题是必然的,所以"在线更新" 就成了家常便饭与必然.如果你要求必须整体重新下载完整下载包体,无法热更, 那么10~20多天后,游戏估计就没啥人了. 热更新要解

客户端热更新框架之UI热更框架设计(下)

上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章.本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合? 现在笔者把设计“UI热更新框架”的整体设计与构建过程表述如下,最后附带源码工程的下载链接,供广大学员参考研究.如果大家有什么不明白的地方,欢迎大家在评论区进行讨论.   1:首先基于笔者以前设计的SUIFW 框架,做进一步功能完善.   完善UI框架对于复杂窗体的直接转向功能.为了小伙伴们能够更好的理解本技术,文章末尾特提供了下载链接供大家

Unity热更新专题(六)uLua简介

Unity热更新专题(六)uLua简介 Unity热更新的解决方案中,uLua无疑是比较好的一种. 所以我们先来介绍一下uLua. 之前文章提到的Lua以及LuaInterface的学习,都是为了学习uLua来做基础的. 关于uLua的学习,我们可以参考官网,以及官方bbs来学习.上面有详细的视频文字教程. 官网:http://www.ulua.org/index.html 官方bbs:http://bbs.ulua.org/ 学习uLua有以上资料就够了. ==================

Unity热更新方案(uLua vs sLua)

首先附上这两个项目的地址,这两个项目都是比较完善的lua解决方案,从效率和使用方式上说都不相伯仲,我最终选择了ulua,但是并不是说其具有压倒性优势. uLua:http://ulua.org/index.html sLua:https://github.com/pangweiwei/slua 引入lua,基本上就是为了热更新,不过后面苹果似乎对lua脚本的热更新也限制的很严格,拿脚本做热更新也要偷偷摸摸的去做.所以说我一贯的观点是游戏框架设计的合理些(比如技能.界面中可以用配置的,尽量不要硬编

[Unity热更新]ulua学习笔记01:一个小坑

看了一下以前写的文章,发现都好水啊..我也想写出能真正帮到别人的文章,但没办法啊,自己的脑子太笨了..希望可以通过不断学习,终有一天能写出点好文章! 最近在学习unity中的热更新,既然大神都说ulua效率最高(就现在来说),那就学习ulua吧!首先要下载的是ulua的包,现在的最新版本是1.08,而且根据官网上说的,网上流行的1.03/1.05含有大量的bug,所以我选择了最新的版本,谁知道就掉进了第一个坑! 因为是菜鸟,所以先复制一下网上的代码看看效果如何,结果碰到这样的错误: 搜索了这些错

unity3d热更新插件uLua学习整理

前言 IOS不能热更新,不是因为不能用反射,是因为System.Reflection.Assembly.Load 无法使用System.Reflection.Emit 无法使用System.CodeDom.Compiler 无法使用这三个不能用,就把传统dotnet动态路径坑死了为啥“这三个不能用,就把传统dotnet动态路径坑死了”呢动态载入dll或者cs的方法就这几个, IOS 下不能动态载入dll或者cs 文件,已经编译进去的没事.=============================

二、unity游戏热更新专题

第 1 章 : 热更新技术学习介绍 课时1:101-热更新技术学习介绍 11:55 什么是热更新? 举例来说 游戏上线后,玩家下载第一个版本(70M左右或者更大),在运营的过程中,如果需要更换UI显示,或者修改游戏的逻辑,这个时候,如果不使用热更新,就需要重新打包,然后让玩家重新下载(浪费流量和时间,体验不好). 热更新可以在不重新下载客户端的情况下,更新游戏的内容. 热更新一般应用在手机网游上. 为什么C#脚本不可以直接更新? C#是一门编程语言,它运行之前需要进行编译,而这个编译的过程在移动

菜鸟学习 - Unity中的热更新 - Lua和C#通信

孙广东 2015-4-6 热更新我是个菜鸟,感谢网上的各位的奉献,这次又当一回搬运工. 准备: 1.了解Lua的语法 推荐书籍<Lua程序设计 第二版> 2.使用ULua插件进行通信 尽量早上真机.因为Bug问题特别多. 大杂烩: 更新LUa其实也是更新资源. Lua被看作一个资源么.Lua代码都是运行时才编译的,不运行的时候就如同一张图片.一段音频一样,都是文件资源:所以更新逻辑只需要更新脚本,不需要再编译,因而Lua能轻松实现"热更新".运行效率由于使用反射,所以成为它

我使用的 unity 热更新方案 JSB(求小编 推荐一下)

今天周五 ,明天没有什么事情,可以安心写一些博客. 今天聊 两个话题 一 , unity热更新的窘境 二 ,我所使用的unity 热更新方案JSB ======================================热更新的窘境============================================= (1)其实unity 热更新到瓶颈是 ios 的 系统本身 ,禁止你 jit .说白了,内存中代码,系统本身不让你执行. 安卓 系统,桌面 系统,本身都支持 动态直接替换d