博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Unity官方发布热更新方案性能对照
阅读量:6586 次
发布时间:2019-06-24

本文共 2333 字,大约阅读时间需要 7 分钟。

孙广东  2016.3.11   

Unity应用的iOS热更新

作者:丁治宇

Unity TechnologiesChina

 

Agenda

•  什么是热更新

•  为何要热更新

•  怎样在iOS 上对Unity 应用进行热更新

•  支持Unity iOS 热更新的各种Lua 插件的对照

什么是热更新

广义定义

无需关闭server,不停机状态下修复漏洞,更新资源等,重点是更新逻辑代码。

狭义定义( iOS热更新)

无需将代码又一次打包提交至AppStore,就可以更新client的执行代码,即不用下载app而自己主动更新程序。

现状

苹果禁止了C#的部分反射操作,禁止JIT(即时编译。程序执行时创建并执行新代码),不同意逻辑热更新,仅仅同意使用AssetBundle进行资源热更新。

为何要热更新

缩短用户获取新版应用的client的流程。改善用户体验。

详细到iOS平台的应用上。有下面几个原因

• App Store的审核周期难控制。

手机应用更新频繁。

对于大型应用,更新成本太大。

终极状态

不又一次下载、不停机状态下全然变换一个应用的内容。

怎样在iOS 上对Unity 应用进行热更新

• Android 应用的热更新

将执行代码预编译为assemblydll

将代码作为TextAsset打包进Assetbundle

执行时。使用Reflection机制实现代码的功能。

更新对应的Assetbundle就可以实现热更新。

 

• Android iOS 热更新的 异同

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

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

 

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

 

• Unity 热更新的注意点

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

熟悉Unity的几个重要的路径

• Resources(仅仅读)

• StreamingAssets(仅仅读)

• Application.dataPath(仅仅读)

• Application.persistentDataPath(可读写)

 

•  重要路径之 Resources

• Resources目录下的资源不管使用与否都会被打包

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

打包后目录下的资源仅仅读

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

使用Resources.Load载入

 

重要路径之StreamingAssets

流数据的缓存目录

目录下的资源不管使用与否都会被打包

资源不会被压缩和加密

打包后目录下的资源仅仅读,主要存放二进制文件

无法做热更新

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

相对路径。详细路径依赖于实际平台

•Application.streamingAssetsPath

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

 

•  重要路径之Application.dataPath

游戏的数据目录的路径(比如在Editor中的Assets

非常少用到

无法做热更新

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

 

•  重要路径之Application.persistentDataPath

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

目录下的资源不管使用与否都会被打包

执行时有效。可读写

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

适合热更新

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

 

•  使用Lua 插件进行iOS 热更新的整体流程

 

支持Unity iOS 热更新的各种Lua 插件的对照

• uLua(asset store)

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

不会产生静态代码

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

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

 

• uLua & cstoLua

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

开发人员众多,资源丰富

静态方法,性能优

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

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

 

• sLua

静态方法,性能优

核心代码简洁

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

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

基于原生版本号的改进

支持Unity iOS 热更新的各种Lua 插件的对照

• C#Light(L#)

淡出主流

• uniLua

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

淡出主流

支持Unity iOS 热更新的各种Lua 插件的对照

然后就是 uLua  sLua的測试代码。

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

測试结果就不弄了 , 大家能够下载PDF 自己看

 

转载地址:http://chhno.baihongyu.com/

你可能感兴趣的文章
lolcat :一个在 Linux 终端中输出彩虹特效的命令行工具
查看>>
ROS机器人程序设计(原书第2版)3.9 3D可视化
查看>>
干货 | 豆子科技首席架构师钟声:Java的纯真年代
查看>>
《数字图像处理与机器视觉——Visual C++与Matlab实现》——0.2 数字图像处理与识别...
查看>>
《移动App测试的22条军规》—App测试综合案例分析23.11节测试微信App对多语言和地区的支持...
查看>>
[译]深入 NGINX: 为性能和扩展所做之设计
查看>>
如何使用 GRUB 2 直接从硬盘运行 ISO 文件
查看>>
《数据整理实践指南》一第2章 是我的问题还是数据的问题
查看>>
Storm-源码分析-Topology Submit-Client
查看>>
深度解析Java8 – AbstractQueuedSynchronizer的实现分析(下)
查看>>
阿里内核月报2014年2月
查看>>
《Python机器学习——预测分析核心算法》——2.2 分类问题:用声纳发现未爆炸的水雷...
查看>>
《嵌入式Linux软硬件开发详解——基于S5PV210处理器》——1.2 S5PV210处理器
查看>>
使用阿里云容器服务Jenkins 2.0实现持续集成之the tag you want篇(updated on 2017.09.06)...
查看>>
Node进阶:核心模块http简介
查看>>
Map排序
查看>>
《C语言及程序设计》实践参考——太乐了
查看>>
Web项目中使用Spring 3.x + Quartz 2.x实现作业调度详解
查看>>
[LeetCode]--60. Permutation Sequence
查看>>
YARN REST API
查看>>