Unity应用的iOS热更新

本文详细介绍了Unity应用在iOS平台上的热更新技术,包括热更新的定义、必要性及实施方法。探讨了苹果政策下的热更新限制,以及通过Lua插件实现热更新的原理和流程。比较了不同Lua插件的性能和适用性。

Unity应用的iOS热更新

作者:丁治宇

Unity TechnologiesChina

 

Agenda

•  什么是热更新

•  为何要热更新

•  如何在iOS 上对Unity 应用进行热更新

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


什么是热更新

• 广义定义

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

• 狭义定义( iOS热更新)

• 无需将代码重新打包提交至AppStore,即可更新客户端的执行代码,即不用下载app而自动更新程序。

• 现状

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


为何要热更新

• 缩短用户获取新版应用的客户端的流程,改善用户体验。

• 具体到iOS平台的应用上,有以下几个原因

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

• 手机应用更新频繁。

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

• 终极状态

• 不重新下载、不停机状态下完全变换一个应用的内容。


如何在iOS 上对Unity 应用进行热更新

• Android 应用的热更新

• 将执行代码预编译为assemblydll

• 将代码作为TextAsset打包进Assetbundle

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

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

 

• Android iOS 热更新的 异同

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

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

 

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

计算机生成了可选文字: 脚 本  转 化 为  Lua 脚 本 可  直 接 解 释 执  行  Apple  逻 辑 代 码  代 码 生 成 技 术  ( 如 Protobu0  文 本 资 源 ( 如 同 纹 理 、 音 频 等 )  更 新 资 源 的 形  式 更 新 程 序  unity

 

• 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 热更新的总体流程

计算机生成了可选文字: 游 戏  游 戏 公 司  待 更 新 资 ( 数 据 & 逻 辑 )  Apple  热 更 新  游 戏  App Store  用 户  待 更 新 资 源 ( 数 据 & 逻 辑 )  V

计算机生成了可选文字: (AssetBundles)  AssetBundles  Runtime  StreamingAssets  AssetBundles  persistentDataPath

 

支持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

转载于:https://www.cnblogs.com/nafio/p/9141762.html

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值