孙广东  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. "0" 并不一定是 假 (false)

    写习惯C/C++系代码的人应该很习惯看见类似这样的代码: 1 2 3 4 5 int i = 0; ...... if(i){    //这里代码不会被执行 } 因此写习惯以后会想当然地觉得其他语言里 ...

  2. MVC Movie App

    ylbtech- ASP.NET MVC:MVC Movie App 功能描述:MVC Movie App 2,TechnologyAndTheEnvironment(技术与环境) 操作系统: win ...

  3. windows 7系统搭建PHP网站环境

    2.新建数据库打开浏览器,输入http://localhost:9999或者http://127.0.0.1:9999回车填写用户名root和密码回车登录点击权限-添加新用户填写用户名,主机选择本地, ...

  4. t-SNE和LDA PCA的学习

    t-SNE 可以看这篇文章: http://bindog.github.io/blog/2016/06/04/from-sne-to-tsne-to-largevis/ LDA可以看这篇文章: htt ...

  5. ubuntu16.04 登录密码破解方法

    1:开机按Shift键,出现如下界面.(手速要快,Shift键要按时间久一点) 选择第二项 2:按回车键进入如下界面,然后选中有recovery mode的选项(第三项) 3:按e进入如下界面,并找到 ...

  6. [Flutter] Creating & Updating State in a Flutter Application

    To create a Stateful widget: 1. Create a StatefulWidget 2. Create a State class SGreeting extends St ...

  7. diamond淘宝框架使用

    转载:http://blog.csdn.net/coolyqq/article/details/50435634 一.概况 diamond是淘宝内部使用的一个管理持久配置的系统,它的特点是简单.可靠. ...

  8. SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

    SQLSTATE[HY000] [2002] Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)   这个 ...

  9. ant-design 实现 添加页面

    1.逻辑代码 /** * 添加用户 */ import React,{PureComponent} from 'react' import {Card,Form,Input,Select,Button ...

  10. MySQL-配置优化技巧

    一.连接请求配置 1.查询当前连接数(show full processlist) show full processlist; 2.最大连接数(max_connections) max_connec ...