373人阅读

什么是热更新呢?首先需要了解移动程序的发布流程:将程序进行打包成相应平台的程序包,就拿Appsrote平台来说,需要将程序打包成xcarchive,打包好后,上传苹果商店,上传之后,苹果商店需要进行审核(审核的时间一般是一周左右),审核通过之后,玩家才可以下载最新的程序,下载时需要下载整个程序包,然后再安装最新程序包,安装好后,才可以运行最新游戏。下图是程序更新流程图。

因此如果将资源和程序打包时放到程序包里,只要对资源和程序进行修改,就需要重新打包上传,提交,审核,下载,安装,非常的麻烦,因此需要一种方案来上述问题。以下的这种方案就是解决更新的问题。首先有一个程序基础包,在上传平台之后就不用对其代码和资源进行修改。然后将以后每次修改的资源放到资源服务器。当程序启动时,从资源服务器获取最新的资源。具体流程是:

1.将资源打包成AssetBundle,并将打包的资源文件的MD5保存到一个文件里,并定义此次更新的版本号xx.xx.xxx 。

2.将资源提交到资源服务器

3.客户端启动,从资源服务器取得版本号ver1,然后再读取本地资源的版本号ver2,比较ver1与ver2,如果ver1与ver2相等,直接进入游戏,否则从服务器下载MD5文件列表,然后读取本地的MD5文件列表,然后对比两个文件,找到MD5改变的文件。

3.下载MD5文件改变的资源

4.更新本地版本配置文件

5. 进入游戏

这就是所谓的热更新,是指当我们在程序启动时,自动更新资源和程序,绕过平台的审核,这样更新程序和资源就非常方便。

对资源的更新比较简单,把资源打包成AB文件,然后放到资源服务器上,客户端程序启动时下载AB文件,程序加载AB文件就可以了,但对与C#程序来说如何进行更新呢,可以将C#打包到Dll里,然后将Dll放到资源服务器上,客户端下载DLL

通过如下代码加载Dll

WWW www = new WWW (URL);
yield return www;

System.Reflection.Assembly.Load (www.bytes)

需要注意的是以上代码只在Android,Windows平台可以运行,不能在IOS平台运行,因为IOS不支持JIT(即时编译),那如何在IOS平台进行更新呢?可以使用Lua脚本语言在IOS平台进行热更新。原理如下

因此为在统一所有平台进行热更新,这里选择Lua作为热更新语言。

Unity3D 热更新 知识相关推荐

  1. Unity3D 热更新方案(集合各位专家的汇总)

    http://blog.csdn.net/guofeng526/article/details/52662994 热更新"这个词,在Unity3D的应用下,是有些语义错误的,但是作为大家都熟 ...

  2. unity3d热更新插件uLua

    转自:http://blog.sina.com.cn/s/blog_930ffa0b0102vbat.html 前言 IOS不能热更新,不是因为不能用反射,是因为 System.Reflection. ...

  3. Unity3D热更新技术点——ToLua(上)

    注: 本文主要介绍tolua的基本原理及其在unity中的使用,希望阅读本文的读者有lua基础,可通过Lua教程 (其中也有IDE的推荐等)或其他途径先进行lua 的学习 热更新 在介绍tolua前, ...

  4. Unity3D热更新之LuaFramework篇[06]--Lua中是怎么实现脚本生命周期的

    前言 用c#开发的时候,新建的脚本都默认继承自Monobehaviour, 因此脚本才有了自己的生命周期函数,如Awake,Start, Update, OnDestroy等. 在相应的方法中实现游戏 ...

  5. Unity3d热更新(四):压缩文件

    之前提到过通过AssetBundle.CreateFromFile读取本地AssetBundle,因为该方法只能读取未压缩的AssetBundle,所以打包AssetBundle时,需要选择Build ...

  6. Unity3D热更新LuaFramework入门实战

    http://www.gameres.com/670141.html 转载于:https://www.cnblogs.com/quansir/p/6379600.html

  7. Unity3D热更新全书-脚本(二) 两级分化

    原地址:http://www.cnblogs.com/crazylights/p/3886840.html 上篇明确了我们探讨的脚本是什么:是写在文本文件里面的代码,可以作为资源加载,取得字符串再执行 ...

  8. Unity3D热更新技术点——ToLua(下)

    在上一篇文章中我们通过一个小的案例,介绍了ToLua在Unity中的基本使用方法,而这次,我们将通过一个更为复杂的例子,继续深入了解ToLua的使用方法及其原理. ToLua文件目录 我们首先来了解一 ...

  9. Unity3D热更设计:一款基于 HybridCLR的C#热更方案

    在这篇文章之前,可以转到我的这两篇博客:C#热更方案 HybridCLR尝鲜:Windows及Android打包.超详细的Unity3D热更新框架,附示例链接,小白也能看的懂_鹿野素材屋的博客-CSD ...

最新文章

  1. 使用coding、daocloud和docker打造markdown纯静态博客
  2. hdu 1163 ( 求n^n位根)
  3. Softer-NMS:CMU旷视最新论文提出定位更加精确的目标检测算法
  4. 什么是Windows Service应用程序?(转)
  5. 从S3获取数据在html表示,AWS Lambda从DynamoDB加载内容,以S3格式显示在HTML中(示例代码)...
  6. Object.prototype.toString.call()检测
  7. custompage.width 不能小数吗_数学启蒙,先学分数还是先学小数?
  8. [golang]nil slice和empty slice的区别
  9. PaperNotes(10)-Maximum Entropy Generators for Energy-Based Models
  10. BaKoMa Tex Word 的使用
  11. c语言汇率转换代码_C语言人民币转换代码..doc
  12. Windows Server 2012开机账户自动登录
  13. 2016全球云计算大会:云服务商们都这样看“云”
  14. mysql innodb 缓冲池_mysql8 参考手册--配置多个InnoDB缓冲池实例
  15. nacos启动报错解决方法
  16. 伸手摘星,未必如愿,但不会弄脏你的手……
  17. Vue2 + Nodejs + WebSocket 完成你画我猜多人在线游戏
  18. 简单实用的Python图像处理库Pillow
  19. 第一次写博客-C/C++软件开发工程师需要学习哪些东西?
  20. CSS浮动,平铺,鼠标状态

热门文章

  1. 基于Android的计步器(Pedometer)的讲解(四)——后台记步
  2. FuzzyKmeans,mahout实现
  3. 中国十大易经著名专家,当代最好的易经大师谈顶级思维
  4. ZeroTier简单使用
  5. ABC创客实验室-助力创新教育发展,让学习成为一种美好的体验.
  6. php星外提权,一次星外虚拟主机的提权
  7. 【postgresql数据库】数据库整体知识完整版-2023电子科技大学期末复习
  8. moviepy音视频剪辑:AudioClip帧处理时报TypeError: only size-1 arrays can be converted to Python scalar错
  9. 物联网、大数据、云计算、人工智能之间的关系如何?
  10. angular的observable