http://blog.csdn.net/guofeng526/article/details/52662994

热更新”这个词,在Unity3D的应用下,是有些语义错误的,但是作为大家都熟知的一项技术,我们姑且这么叫它,相信很长时间内,大家依然还会这么叫,甚至有人叫它“暖更新”。

一、什么是热更新?

热更新,是对hot update或者 hot fix的翻译,计算机术语,表示在不停机的前提下对系统进行更改(摘抄一下):

“hot就是热,机器运行会发烫,hot就是不停机的意思。

热更新,是个很形象的词,机器烫的时候更新,开着更新。

比如Windows不重启的前提下安装补丁

比如Http服务器在不重启的前提下换掉一个文件

那么对于Unity3D来说,何谓热更新?

额……这个真相实在是不想讲出来,因为很多时候,这个词都用错了。

Unity3D是一个客户端工具,用户是否重启客户端,根本是我们不关心的问题。

很多时候我们用着热更新这个词汇,却不需要真的热更新。

只有少部分游戏,游戏资源在玩的过程中边玩边下,不重启的前提下变更了资源。

我们不需要用户不重启客户端就能实现资源代码的更新,我们需要的是用户重启客户端能实现资源代码的更新。

让我们暂时放过这个我们的需求连词汇都用错了这个基本事实,来总结一下何谓Unity3D热更新,Unity3D热更新就是指:用户重启客户端就能实现客户端资源代码更新的需求或者功能。”

二、为什么要热更新?

热更新,能够缩短用户取得新版客户端的流程,改善用户体验。

没有热更新:

pc用户:

下载客户端->等待下载->安装客户端->等待安装->启动->等待加载->玩

手机用户:

商城下载APP->等待下载->等待安装->启动->等待加载->玩

有了热更新:

pc用户:

启动->等待热更新->等待加载->玩

有独立loader的pc用户:

启动loader->等待热更新->启动游戏->等待加载->玩

手机用户:

启动->等待热更新->等待加载->玩

通过对比就可以看出,有没有热更新对于用户体验的影响还是挺大的,主要就是省去用户自行更新客户端的步骤。

三、如何热更新?Unity3D的热更新的方法比较

3.1、Android 应用的热更新

• 将执行代码预编译为assembly dll。

• 将代码作为TextAsset打包进Assetbundle。

• 运行时,使用Reflection机制实现代码的功能。

• 更新相应的Assetbundle即可实现热更新。

3.2、Android iOS 热更新的异同

• 苹果官方禁止iOS下的程序热更新;JIT在iOS下无效。

• 热更新方案:Unity+Lua插件。

3.3、 使用Lua 插件进行iOS 热更新的原理

3.4、Unity 热更新的注意点

• 需要更新的代码、资源,都必须打包成AssetBundle(建议使用未压缩的格式打包)

• 熟悉Unity的几个重要的路径

• Resources(只读)

• StreamingAssets(只读)

• Application.dataPath(只读)

• Application.persistentDataPath(可读写)

3.5、重要路径之 Resources

• Resources文件夹下的资源无论使用与否都会被打包

• 资源会被压缩,转化成二进制

• 打包后文件夹下的资源只读

• 无法动态更改,无法做热更新

• 使用Resources.Load加载

3.6、重要路径之StreamingAssets

• 流数据的缓存目录

• 文件夹下的资源无论使用与否都会被打包

• 资源不会被压缩和加密

• 打包后文件夹下的资源只读,主要存放二进制文件

• 无法做热更新

• WWW类加载(一般用CreateFromFile ,若资源是AssetBundle,依据其打包方式看是否是压缩的来决定)

• 相对路径,具体路径依赖于实际平台

•Application.streamingAssetsPath

• IOS: Application.dataPath + “/Raw” 或Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data/Raw

3.7、重要路径之Application.dataPath

• 游戏的数据文件夹的路径(例如在Editor中的Assets)

• 很少用到

• 无法做热更新

• IOS路径: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/xxx.app/Data

3.8、重要路径之Application.persistentDataPath

• 持久化数据存储目录的路径( 沙盒目录,打包之前不存在 )

• 文件夹下的资源无论使用与否都会被打包

• 运行时有效,可读写

• 无内容限制,从StreamingAsset中读取二进制文件或从AssetBundle读取文件来写入PersistentDataPath中

• 适合热更新

• IOS路径: Application/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx/Documents

3.9、使用Lua 插件进行iOS 热更新的总体流程

四、支持Unity iOS 热更新的各种Lua 插件的对比

4.1、uLua(asset store)

• uLua插件原生版本,开山鼻祖

• 不会产生静态代码

• 反射机制,效率低下,速度慢,gcalloc频繁

• 已停止更新维护,不支持Unity5.x,淡出主流

4.2、uLua & cstoLua

• 开发平台成熟稳定,Bug修复迅速

• 开发者众多,资源丰富

• 静态方法,性能优

• 有成功商业产品案例(啪啪三国、超神战队、酷鱼吧捕鱼、绝地战警、这不是刀塔等)

• 都是基于原生版本的改进;未来,两者会合并成一个插件

开源项目地址:

https://github.com/topameng/CsToLua

4.3、sLua

• 静态方法,性能优

• 核心代码简洁

• 资源较少,开发平台不够成熟稳定

• 无成功商业产品案例成功商业产品案例

• 基于原生版本的改进

开源项目地址:

https://github.com/pangweiwei/slua

4.4、C#Light(L#)

• 淡出主流,想要了解的小伙伴点击这里:

https://github.com/lightszero/LSharp

4.5、 uniLua

• c#实现的Lua虚拟机,非完整方案

• 淡出主流

4.6、各位专家给出的分析

下图纵坐标为测试用例,横坐标是消耗时间或内存分配( 对数坐标 )。

综合来看 肯定是 uLua & cstoLua会更好一些。

五、实践

熟悉NGUI的小伙伴可以参考这里:

https://github.com/jarjin/SimpleFramework_NGUI

熟悉UGUI的小伙伴可以参考这里:

https://github.com/jarjin/LuaFramework_UGUI

转载于:https://www.cnblogs.com/quansir/p/6610449.html

Unity3D 热更新方案(集合各位专家的汇总)相关推荐

  1. 腾讯开源手游热更新方案,Unity3D下的Lua编程

    写在前面 \\ xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能.易用性.扩展性而广受好评.现在,腾讯已经将xLua开源到GitHub. ...

  2. 手游热更新方案xLua开源:Unity3D下Lua编程解决方案

    转载:https://mp.weixin.qq.com/s/2bY7A6ihK9IMcA0bOFyB-Q 导语 xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾 ...

  3. 【腾讯Bugly干货分享】手游热更新方案xLua开源:Unity3D下Lua编程解决方案

    本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2bY7A6ihK9IMcA0bOFyB-Q 导语 xL ...

  4. 移动端热更新方案(iOS+Android)

    PPT资源包含iOS+Android 各种方案分析:https://github.com/qiyer/Share/blob/master/%E7%83%AD%E6%9B%B4%E6%96%B0%E5% ...

  5. android热更新插件,与Android热更新方案Amigo的再次接触

    Amigo 作为一个"过气"的的热修复框架,用来学习和了解一下热修复的基本原理还是很好的.本文是本系列的第三篇. 前两篇: 与Android 热更新方案Amigo的初次接触 原作者 ...

  6. iOS 热更新方案 - lance的专栏 - 博客频道 - CSDN.NET

    iOS 热更新方案 - lance的专栏 - 博客频道 - CSDN.NET Weex

  7. Android热更新方案Robust

    美团•大众点评是中国最大的O2O交易平台,目前已拥有近6亿用户,合作各类商户达432万,订单峰值突破1150万单.美团App是平台主要的入口之一,O2O交易场景的复杂性决定了App稳定性要达到近乎苛刻 ...

  8. Unity热更新方案探索与讨论

    热更新必要性 App Store审核周期长 应用更新频繁 更新版本对留存数据有很大影响 Lua相关 Lua:脚本,解释性语言 LuaJit:扩展高效版本,支持编译成二进制代码. Tolua++:C/C ...

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

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

最新文章

  1. 蚂蚁森林合种计划(2020.11.14,7天有效,每周6更新)
  2. java数组定义便利,java数组的定义(菜鸟教程)
  3. mysql的还原_MySQL 还原
  4. 【设计模式】基本概念
  5. Win10光驱不见了
  6. 自定义C++异常处理
  7. powershell设置了权限依旧无法运行脚本_Power Shell折腾记
  8. OpenCV3学习(11.8) FREAK描述符提取器
  9. 分区表(Partitioned object)
  10. 蓝桥杯2016年第七届C++省赛B组第一题-煤球数目
  11. Hibernate存取JSON数据
  12. php轻松入门视频教程,PHP轻松入门视频教程
  13. 自律不熬夜真的那么难吗?
  14. Github 资源收集
  15. 三维地理信息平台介绍与比较
  16. 示波器的使用及其原理
  17. 21西南交通大学计算机专硕成功上岸
  18. 双十一就要到啦,教你用Python制作抢购脚本,秒杀一切商品
  19. 云存储是什么?云存储的常见三种类型
  20. oracle 默认表空间 10g,oracle 10G 收缩表空间

热门文章

  1. 学习pytorch的一些自己犯过的错误而总结的注意事项,估计其他也会使用
  2. Makefile 中all:的作用
  3. html 显示接口数据格式化,科技常识:html格式化输出JSON示例(测试接口)
  4. 对电机油冷分析_油冷电驱汇总(Tesla/Nidec/大众MEB/雪佛兰/华为)
  5. java常用类的特征_Java常用类-包装类
  6. mysql数据的持久化_一起做个简单的数据库(五):持久化存储
  7. vue 打开html流_三种方案解决Vue项目打包后dist中的index.html用浏览器无法直接打开的问题...
  8. quartz可以指定方法名吗_2020象限仪流星雨肉眼可以看见吗?象限仪座流星雨观测方法...
  9. 序列化和反序列化_PHP序列化和反序列化
  10. 过程语句 oracle,Oracle 过程控制语句整理