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

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

热更新要解决的问题?
1: 更新频繁而IOS审核长,IOS无法用DLL反射机制去做代码更新。 如果无热更新机制,则客户端每次都需要玩家重新下载一次完整的安装包,用户体验不好。
2: 解决发布包的容量问题,一切都可以增量下载。

热更新的基本原理是什么?
首先要清楚Unity的打包原理,也就是AssetBundle的打包机制,他会把prefab打包成.asset格式作为传输的数据。通过校验文件的MD5值来判断是否需要更新,如果需要更新则下载差异文件。lua属于解释性文件所以能通过www直接下载到本地,通过C#与lua交互,把逻辑写在lua里,从而实现代码热更新。

为什么需要带热更新的框架?
在中大型商业项目中,基于以上热更新的实际运营需求,国内外各大游戏公司纷纷基于国内已知技术与成熟插件,由技术总监或者主程来牵头研发自己公司的热更新框架。

笔者开发的热更新简单框架介绍:
笔者基于自身技术储备参考部分行业公司框架产品,设计了一套简单热更新客户端框架,现介绍如下,希望以此起到抛砖引玉的作用,结交行业朋友。

热更新框架总体构成:
客户端热更框架,核心主要设计为以下几个模块:
A: 热更新UI框架模块。
B: lua框架(包含热补丁模块)。
lua框架由“纯lua框架”与“C#映射lua”等技术构成。可以实现在lua脚本中,定义unity的生命周期(eg: Start()、Update() 等),方便lua的编写与功能扩展。
业务逻辑方面,固定业务不需要频繁修改的功能,笔者还是坚持用C#完成。 有频繁更新需求的则用基于lua框架来编写。基于本套lua框架,其比纯lua编写效率高很多。
C: 服务器端热更新流程模块。
D: 基础支持插件与框架: xlua插件与AB(AssetBundle)框架。

热更新框架运行过程:
整体热更框架的运行流程如下:
1: 首先热更新流程模块启动。 玩家可以从客户端游戏中看到PC或移动端(手机、Ipad等)与服务器的更新过程。
2: 热更新的UI框架启动。
3: lua框架启动(与第2部分从宏观上可以并行运行)。
3.1> 检查本项目中哪些C#脚本需要进行Bug动态更新。
3.2> 初始化lua框架与C#建立生命周期映射关系,进一步方便程序员在lua中使用unity提供的系统函数(例如:Start()、Update()等) 。
3.3> lua框架启动完毕后,通知框架外部可以开始加载项目lua文件,且运行期解释执行。
4: 场景资源加载。

最后由于篇幅所限,笔者先写到这。下一篇本人会先就 “热更新UI框架” 这个模块,进行详细讲解,欢迎广大小伙伴们留言评论!

原文地址:https://blog.51cto.com/liuguozhu/2385022

时间: 2024-08-13 21:13:38

客户端热更新框架之UI热更框架设计(上)的相关文章

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

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

热更新有多重要?游戏代码热更新杂谈

热更新的内容可以是美术资源,可以是代码,但相对来说,美术资源的更新不会受到约束,代码实际上是重灾区,本文介绍的主要是代码热更新. 热更新对于开发者来说是一件麻烦事,特别对于看重效率,便捷性和结构的程序员来说,热更新就是运营人员的不懂技术的表现. 然而,对于上线才是刚刚开始的网络游戏,特别是手游来说,热更新是极为重要的基础功能. 为什么要热更新 客户端 1.适应上线需求 对于手游客户端来说,受到苹果审核的约束, 一次审核提交需要10~20天不等的等待时间.而这段时间,开发进度依然会推进很多. 一旦

苹果下架4万App就只是因为“热更新”

前去除软件热更新功能,不然有可能下架后,昨日(6 月 22 日),有媒体报道,一周内苹果 App Store 下架了近 4万款中国 App .一种流行观点认为,苹果不是说着玩,而是真对热更新动刀子了. 热更新是一种各大手游等众多 App 常用的更新方式,即用户通过 App Store下载App之后,打开 App 时遇到的即时更新. 2017年6月,AppStore 审核团队确实针对 AppStore 中"热更新"的 App 开发者发送邮件,要求移除所有相关的代码.框架或 SDK,并重新

Unity官方公布热更新方案性能对比

孙广东  2016.3.11 Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda ?  什么是热更新 ?  为何要热更新 ?  如何在iOS 上对Unity 应用进行热更新 ?  支持Unity iOS 热更新的各种Lua 插件的对比 什么是热更新 ? 广义定义 ? 无需关闭服务器,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码. ? 狭义定义( iOS热更新) ? 无需将代码重新打包提交至AppStore,即可更新客户端的执行代码,即

Unity3D热更新方案网摘总结

参考:http://blog.csdn.net/guofeng526/article/details/52662994 http://blog.csdn.net/u010019717/article/details/50853207 "热更新"这个词,在Unity3D的应用下,是有些语义错误的,但是作为大家都熟知的一项技术,我们姑且这么叫它,相信很长时间内,大家依然还会这么叫,甚至有人叫它"暖更新". 一.什么是热更新? 广义定义 无需关闭服务器,不停机状态下修复漏

用ECMAScript4 ( ActionScript3) 实现Unity的热更新 -- 使用FairyGUI (一)

我们的热更新脚本在实际使用中,当然也要支持常用的第三方组件,例如这里介绍一个非常实用的第三方UI库:FairyGUI. 什么是FairyGUI 这里照搬FaiyGUI官网的介绍: 重新定义 UI 制作流程,全可视化,零代码,是一款同时适用于程序员.设计师和游戏策划的UI制作工具. 配合FairyGUI-SDK,在各个游戏引擎都能得到高效的渲染表现,独特的FairyBatching技术可自动优化复杂界面的DC数量. 我们这里自然是使用它的Unity组件啦. 我们这篇文章的主旨并非是介绍如何使用Fa

Android 美团Robust热更新 使用入门

Android热更新方案Robust 相信很多人都认识了解过 热修复.热更新.热补丁(对于这个技术也没有特别标准的一种叫法,下面我统一叫热更新),之后的一年里,各种热更新方案如雨后春笋般出现,比较耳熟能详的就有Nuwa.Tinker.Andfix 和 Dexposed 等等,他们之间的区别以及优缺点就不在这里讨论了,鉴于它们的实际使用和局限性,美团的开发团队就脑洞大开了. 就去年 Google 高调发布了 Android Studio 2.0,其中最重要的新特性Instant Run,实现了对代

Unity3D游戏开发之Lua与游戏的不解之缘终结篇:UniLua热更新完全解读

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 喜欢我的博客请记住我的名字:秦元培,我的博客地址是blog.csdn.net/qinyuanpei. 转载请注明出处,本文作者:

【Cocos2d-x】实现资源热更新

热更新介绍 什么是热更新? 游戏客户端启动时,主动请求服务端检查版本号,并更新资源到本地. 应用场景: 情况一:游戏客户端已经发布了,但突然发现有个比较严重的bug需要修复.这时需要更新游戏的代码(Lua代码). 情况二:情人节到了,需要搞个活动,在游戏中营造一个节日氛围.这时,需要更新游戏资源或增加一些功能. 好处:不需要重新打包和提交应用到市场等待审核. 热更新流程 AssetsManager 在Cocos2d-x中已经封装了用于实现热更新功能的类,就是AssetsManager. api说