什么是热更新,为什么需要热更新?
          热更新是目前各大手游等众多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框架" 这个模块,进行详细讲解,有感兴趣小伙伴们,给我留言,谢谢!

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

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

    上一篇笔者介绍了关于什么是热更新,为什么需要热更新的技术文章.本篇就专门针对UI框架的热更新功能实现部分展开讨论,讨论的重点是热更新如何与UI框架进行结合? 现在笔者把设计“UI热更新框架”的整体设计 ...

  2. vue-cli3热更新配置,解决热更新失败的问题,保存代码浏览器自动刷新

    在vue,config.js中配置css热更新 const IS_PROD = ['production', 'test'].includes(process.env.NODE_ENV) css: { ...

  3. 热更新之lua框架设计

    目前中大型游戏项目包含部分VR与AR项目,都需要热更新与在线修改Bug等功能实现,虽然Xlua等插件已经给出了关于C#与Lua语言之间的双向无缝调用实现,但是就热更新的架构却没有提出,这需要广大游戏公 ...

  4. 体验ToLua框架下热更新(Phpstudy)

    一.关于热更新的详细流程 首先我们需要需要将本机电脑作为服务器打开,这是第一步 1.1.1如何确定我们的电脑是作为服务器打开的. 我们打开一个浏览器在地址栏中输入127.0.0.1.或者是localh ...

  5. 【ASP.NET Core快速入门】(六)配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...

  6. 菜鸟入门【ASP.NET Core】6:配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:这个词听着有点熟悉,但到底是什么呢? 一般来说:创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOpti ...

  7. .NET CORE 2.0小白笔记(五):配置的热更新、配置的框架设计

    配置的热更新 什么是热更新:一般来说,我们创建的项目都无法做到热更新:即项目无需重启,修改配置文件后读取到的信息就是修改配置之后的 我们只需要吧项目中用到的IOptions改成IOptionsSnap ...

  8. 对C#热更新方案ILRuntime的探究

    转载请标明出处:http://www.cnblogs.com/zblade/ 对于游戏中的热更,目前主流的解决方案,分为Lua(ulua/slua/xlua/tolua)系和ILRuntime代表的c ...

  9. koa和egg项目webpack热更新实现

    背景 在用Node.js+Webpack构建的方式进行开发时, 我们希望能实现修改代码能实时刷新页面UI的效果. 这个特性webpack本身是支持的, 而且基于koa也有现成的koa-webpack- ...

随机推荐

  1. Angular集成UEditor

    1.Ueditor的集成主要通过把UEditor做成一个Component来实现,先上Component代码: import { AfterContentInit, Component, Input, ...

  2. 理解Python中的类对象、实例对象、属性、方法

    class Animal(object): # 类对象 age = 0 # 公有类属性 __like = None # 私有类属性 def __init__(self): # 魔法方法 self.na ...

  3. Unity3D学习(八):《Unity Shader入门精要》——透明效果

    前言 在实时渲染中要实现透明效果,通常会在渲染模型时控制它的透明通道. Unity中通常使用两种方法来实现透明 :(1)透明度测试(AlphaTest)(2)透明度混合(AlphaBlend).前者往 ...

  4. linux ubuntukylin和deepin操作系统的比较及改进方向的建议

    研发中国的操作系统的需求在我看来是安全,还有就是自主.如果做的好还可以在创新上,使用体验上进行一波超越.现有的所谓的国产操作系统我了解的除了基于安卓的凤凰系统就是基于Linux的像优麒麟和deepin ...

  5. RecyclerView android

    RecyclerView是用来替代ListView.GridView的一个牛掰的控件.用起来更灵活,还能实现线性布局(横向.纵向).网格布局.瀑布流等美观的UI. 在使用RecyclerView时候, ...

  6. HttpClient 专题

    HttpClient is a HTTP/1.1 compliant HTTP agent implementation based on HttpCore. It also provides reu ...

  7. centos6.9 升级内核版本

    想在centos6.9上安装docket,不过因为内核版本是2.6的故而想升级到最新的内核版本 晚上有编译升级的比较麻烦,不过有助于理解内核升级,我使用的直接升级到最新版方法 1. 导入public ...

  8. XSS(笔记1)

    概念 跨站脚本(Cross-Site Scripting,XSS) 发生在目标网站中目标用户的浏览器层面上,当用户浏览器渲染整个HTML文档的过程中出现了不被预期的脚本指令并执行时,XSS就会发生.为 ...

  9. selenium之 坑(StaleElementReferenceException: Message: Element not found in the cache...)

    今天给大家分享一个selenium中经常会有人遇到的坑: selenium.common.exceptions.StaleElementReferenceException: Message: Ele ...

  10. 转[@SuppressWarnings详解]

    背景知识:       从JDK5开始提供名为Annotation(注释)的功能,它被定义为JSR-175规范.注释是以“@注释名”在代码中存在的,还可以添加一些参数 值,例如:@SuppressWa ...