Unity3D 热更新方案(集合各位专家的汇总)
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 热更新方案(集合各位专家的汇总)相关推荐
- 腾讯开源手游热更新方案,Unity3D下的Lua编程
写在前面 \\ xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾讯自研游戏,因其良好性能.易用性.扩展性而广受好评.现在,腾讯已经将xLua开源到GitHub. ...
- 手游热更新方案xLua开源:Unity3D下Lua编程解决方案
转载:https://mp.weixin.qq.com/s/2bY7A6ihK9IMcA0bOFyB-Q 导语 xLua是Unity3D下Lua编程解决方案,自2016年初推广以来,已经应用于十多款腾 ...
- 【腾讯Bugly干货分享】手游热更新方案xLua开源:Unity3D下Lua编程解决方案
本文来自于腾讯Bugly公众号(weixinBugly),未经作者同意,请勿转载,原文地址:http://mp.weixin.qq.com/s/2bY7A6ihK9IMcA0bOFyB-Q 导语 xL ...
- 移动端热更新方案(iOS+Android)
PPT资源包含iOS+Android 各种方案分析:https://github.com/qiyer/Share/blob/master/%E7%83%AD%E6%9B%B4%E6%96%B0%E5% ...
- android热更新插件,与Android热更新方案Amigo的再次接触
Amigo 作为一个"过气"的的热修复框架,用来学习和了解一下热修复的基本原理还是很好的.本文是本系列的第三篇. 前两篇: 与Android 热更新方案Amigo的初次接触 原作者 ...
- iOS 热更新方案 - lance的专栏 - 博客频道 - CSDN.NET
iOS 热更新方案 - lance的专栏 - 博客频道 - CSDN.NET Weex
- Android热更新方案Robust
美团•大众点评是中国最大的O2O交易平台,目前已拥有近6亿用户,合作各类商户达432万,订单峰值突破1150万单.美团App是平台主要的入口之一,O2O交易场景的复杂性决定了App稳定性要达到近乎苛刻 ...
- Unity热更新方案探索与讨论
热更新必要性 App Store审核周期长 应用更新频繁 更新版本对留存数据有很大影响 Lua相关 Lua:脚本,解释性语言 LuaJit:扩展高效版本,支持编译成二进制代码. Tolua++:C/C ...
- Unity3D热更新技术点——ToLua(上)
注: 本文主要介绍tolua的基本原理及其在unity中的使用,希望阅读本文的读者有lua基础,可通过Lua教程 (其中也有IDE的推荐等)或其他途径先进行lua 的学习 热更新 在介绍tolua前, ...
最新文章
- 蚂蚁森林合种计划(2020.11.14,7天有效,每周6更新)
- java数组定义便利,java数组的定义(菜鸟教程)
- mysql的还原_MySQL 还原
- 【设计模式】基本概念
- Win10光驱不见了
- 自定义C++异常处理
- powershell设置了权限依旧无法运行脚本_Power Shell折腾记
- OpenCV3学习(11.8) FREAK描述符提取器
- 分区表(Partitioned object)
- 蓝桥杯2016年第七届C++省赛B组第一题-煤球数目
- Hibernate存取JSON数据
- php轻松入门视频教程,PHP轻松入门视频教程
- 自律不熬夜真的那么难吗?
- Github 资源收集
- 三维地理信息平台介绍与比较
- 示波器的使用及其原理
- 21西南交通大学计算机专硕成功上岸
- 双十一就要到啦,教你用Python制作抢购脚本,秒杀一切商品
- 云存储是什么?云存储的常见三种类型
- oracle 默认表空间 10g,oracle 10G 收缩表空间
热门文章
- 学习pytorch的一些自己犯过的错误而总结的注意事项,估计其他也会使用
- Makefile 中all:的作用
- html 显示接口数据格式化,科技常识:html格式化输出JSON示例(测试接口)
- 对电机油冷分析_油冷电驱汇总(Tesla/Nidec/大众MEB/雪佛兰/华为)
- java常用类的特征_Java常用类-包装类
- mysql数据的持久化_一起做个简单的数据库(五):持久化存储
- vue 打开html流_三种方案解决Vue项目打包后dist中的index.html用浏览器无法直接打开的问题...
- quartz可以指定方法名吗_2020象限仪流星雨肉眼可以看见吗?象限仪座流星雨观测方法...
- 序列化和反序列化_PHP序列化和反序列化
- 过程语句 oracle,Oracle 过程控制语句整理