孙广东  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下的程序热更新;JIT在iOS下无效。

• 热更新方案: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://china.unity3d.com

Unity官方发布热更新方案性能对照的更多相关文章

  1. Unity实现c#热更新方案探究(三)

    转载请标明出处:http://www.cnblogs.com/zblade/ 前面两篇文章从头到尾讲解了C#热更新的一些方案,从程序域来加载和卸载DLL,到使用ILRuntime来实现安卓和IOS平台 ...

  2. Unity实现c#热更新方案探究(一)

    转载请标明出处:http://www.cnblogs.com/zblade/ 最近研究了一下如何在unity中实现c#的热更新,对于整个DLL热更新的过程和方案有一个初步的了解,这儿就写下来,便于后续 ...

  3. Unity实现c#热更新方案探究(二)

    转载请标明出处:http://www.cnblogs.com/zblade/ 一.IOS对DLL热更新的禁止 紧接上文,继续对C#热更新的研究.上文中,已经说了如何基于appDomain来实现对DLL ...

  4. unity热更新方案对比

    Unity应用的iOS热更新 •  什么是热更新 •  为何要热更新 •  怎样在iOS 上对Unity 应用进行热更新 •  支持Unity iOS 热更新的各种Lua 插件的对照 什么是热更新 • ...

  5. Unity代码热更新方案 JSBinding + SharpKit 首页

    目前Unity的代码更新方案有很多,主要以lua为主. JSBinding + SharpKit 是一种新的技术,他做了两件事情: JSBinding将C#导出到 JavaScript (引擎是 Mo ...

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

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

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

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

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

    原文:http://www.sohu.com/a/123334175_355140 作者|车雄生 编辑|木环 腾讯最近在开源方面的动作不断:先是微信跨平台基础组件Mars宣布开源,腾讯手游又于近期开源 ...

  9. Unity3D热更新方案网摘总结

    参考:http://blog.csdn.net/guofeng526/article/details/52662994 http://blog.csdn.net/u010019717/article/ ...

随机推荐

  1. 科研不是比赛,而是一种对未知和完美的自我追求——跟邢波(Eric Xing)面对面聊科研

    编者按:6月26日,2014年国际机器学习大会(ICML)在北京国际会议中心完美落幕.作为机器学习领域两大顶尖年会之一,这是 ICML大会30多年来首次来到中国和远东,在国内的机器学习界震动不小.身为 ...

  2. Python数据整合与数据准备-BigGorilla介绍

    参考文档:http://www.biggorilla.org/zh-hans/walkt/ 一.前言 “根据访谈记录和专家估计,数据科学家将50%至80%的时间花在搜集和准备难以梳理的数字数据的琐碎工 ...

  3. Kubernetes用户指南(三)--在生产环境中使用Pod来工作、管理部署

    一.在生产环境中使用Pod来工作 本节将介绍一些在生产环境中运行应用非常有用的功能. 1.持久化存储 容器的文件系统只有当容器正常运行时有效,一旦容器奔溃或者重启,所有对文件系统的修改将会丢失,从一个 ...

  4. 【转】angular中$parse详解教程

    原文: https://yq.aliyun.com/ziliao/40516 ------------------------------------------------------------- ...

  5. Netty4 ServerBootstrap 初始化channelFactory ReflectiveChannelFactory

    只需要在启动之前传入你需要用的channel类型就可以了. ServerBootstrap初始化channelFactory过程: 最后我们再来看看这个channelFactory的使用场景:

  6. 百度地图-修改marker图标(icon)

    百度地图-修改marker图标(icon) 学习了:https://blog.csdn.net/clh604/article/details/9412291/ 源码膜拜: var map = new ...

  7. [Javascript] Intercept property access with Javascript Proxy

    A Javascript Proxy object is a very interesting es6 feature, that allows you to determine behaviors ...

  8. PuTTY连接Linuxserver常常断线解决方式

    PuTTY在远程连接server之后.常常会断线提示"Software caused connection abort",并且常常在非常短的时间内就失去连接. 解决方式例如以下: ...

  9. openerp所用QWEB2的调试笔记

    [1] 调式qweb模板时, 可以脱离openerp环境 阅读一下openerp目录 qweb目录中的几个html文件,可以作为起步 在浏览器下, 可以这样运行这些文件 http://127.0.0. ...

  10. 云解析DNS使用教程

    云解析(Domain. Name System,简称DNS)是一种高可用性.高可扩展的权威DNS服务和DNS管理服务.它的目的是为企业和开发者提供稳定.安全.智能的把网站域名或应用资源转换为计算机用于 ...