Unity应用的iOS热更新

•  什么是热更新

•  为何要热更新

•  怎样在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修复迅速

• 开发人员众多,资源丰富

• 静态方法,性能优

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

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

ulua http://www.ulua.org/

• sLua

• 静态方法,性能优

• 核心代码简洁

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

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

• 基于原生版本号的改进

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

• C#Light(L#)

• 淡出主流

• uniLua

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

• 淡出主流

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

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

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

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

unity热更新方案对比的更多相关文章

  1. unity 热更方案对比

    现在一般使用的方案有:tulua&ulua.xlua.ILRuntime 对比: tulua&ulua 方案成熟,稳定第三方库支持 xlua 之前是为了热更修复线上bug的,腾讯发起的 ...

  2. unity 热更新方案ILRuntime

    https://github.com/meta-42/ILRuntime 教程 https://ourpalm.github.io/ILRuntime/public/v1/guide/index.ht ...

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

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

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

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

  5. Unity官方发布热更新方案性能对照

    孙广东  2016.3.11 Unity应用的iOS热更新 作者:丁治宇 Unity TechnologiesChina Agenda •  什么是热更新 •  为何要热更新 •  怎样在iOS 上对 ...

  6. Unity热更新对比

    https://www.jianshu.com/p/f9d90edf4a7c Unity 热更新为啥用Lua 详解 ILRuntime的优势 同市面上的其他热更方案相比,ILRuntime主要有以下优 ...

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

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

  8. 【转】unity 热更新思路和实现

    声明:本文介绍的热更新方案是我在网上搜索到的,然后自己修改了一下,相当于是借鉴了别人的思路,加工成了自己的,在此感谢无私分享经验的朋友们. 想要使用热更新技术,需要规划设计好资源比较策略,资源版本,确 ...

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

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

随机推荐

  1. WPF后台修改内容界面不显示问题

    通知3部曲:1.Model继承并实现 INotifyPropertyChanged 接口:2.数据集合使用ObservableCollection<T>集合:3.View使用Binding ...

  2. SQL将一个表中的某一列值全部插入到另一个表中

    1.  SQL将一个表中的某一列值全部插入到另一个表中 插入的话: insert into a(col) select col from b; 更新的话: update a set col=selec ...

  3. appium自动化测试框架——在python脚本中执行dos命令

    一般我们运行dos命令,会有两种需求,一种是需要收集执行结果,如ip.device等:一种是不需要收集结果,如杀死或开启某个服务. 对应的在python中就要封装两种方法,来分别实现这两种需求. 1. ...

  4. 进击JavaScript核心 --- (1)基本数据类型

    ES5之前提供了 5种基本数据类型 和 1种引用数据类型 基本数据类型:Undefined, Null, String, Number, Boolean 引用数据类型:Object ES6开始引入了一 ...

  5. Glassfish DeploymentException: Error in linking security policy for

    http://stackoverflow.com/questions/7322476/glassfish-deploymentexception-error-in-linking-security-p ...

  6. js中的面向对象程序设计

    面向对象的语言有一个标志,即拥有类的概念,抽象实例对象的公共属性与方法,基于类可以创建任意多个实例对象,一般具有封装.继承.多态的特性!但JS中对象与纯面向对象语言中的对象是不同的,ECMA标准定义J ...

  7. 用 scp 命令通过 SSH 互传文件

    上传单个文件到远程服务器 命令格式 scp [/path/local_dir/filename] [username@servername:/path/remote_dir] 上传本地的 vimrc ...

  8. Netty-flush

    TimerServer: ch.pipeline().addLast(new TimeEncoder()); ch.pipeline().addLast(new TimeServerHandler() ...

  9. 转 event 'utl_file I/O':

    The ASH report shows tables and data files with wait event 'utl_file I/O': CHANGES No changes. CAUSE ...

  10. [FACT_采购信息]增加了延期天数

    [延期天数]是指的采购单上的货品交货日期 减 [厂家来货]单据货品第一次到货日期. [FACT_采购信息] SELECT p.[Purchase_ID] [采购单号ID], p.[Supply_No] ...