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. 技术感悟---主动学习
  2. 结构之美——优先队列基本结构(四)——二叉堆、d堆、左式堆
  3. 蓝桥杯练习(java):字符串对比
  4. UVa 1639 (期望) Candy
  5. mysql 打包 脚本_windows下mysql自动备份压缩打包时间命名批处理脚本
  6. mysql的搜索效率_Mysql模糊查询like效率,以及更高效的写法
  7. VIPKID上云 解决多云Web统一安全防护问题
  8. 卡巴斯基公布7月中国地区20大恶意软件排行
  9. python open函数 创建变量文件_python的open函数怎么用
  10. java 存储过程_Java 调用存储过程
  11. Assembly.Load,Assembly.LoadFile 与 Assembly.LoadFrom
  12. 事业编和公务员哪个好?
  13. 【转】在淘宝一年测试工作的感悟
  14. python可以下载百度文库_用Python爬取百度文库0下载券的免费文档详细步骤,附可执行软件...
  15. java对象转json
  16. 用acdess制作html文件,使用ACDSee制作图片注释
  17. b站的服务器在哪个文件夹,b站缓存的视频在哪个文件 具体操作步骤
  18. lpx寒假作业案例9
  19. 中粮营销致远A6应用探秘:高速审批执行,营销策略落地
  20. Linux LVM全面实践

热门文章

  1. 利用脚本帮找回微信上删除了“好友“
  2. JAVA | 线程(四)线程通信
  3. linux 怎样清理内存,linux清理内存命令(示例代码)
  4. 6_iOS干货5_iOS颜色汇总
  5. 使用Dinktopdf在.net core项目里将Html转成PDF
  6. Sitecore 8 基础II - Sitecore CM与CD服务器部署
  7. POP店铺设置京东拼购与拼购店铺一样么?
  8. java 锁定窗口大小_怎么样让一个JAVA编的界面的窗口大小固定
  9. Random伪随机数
  10. 谷歌并未放弃TensorFlow!将于2023年发布新版,明确四大支柱!