[关闭]
@ts541933433 2018-12-11T15:20:04.000000Z 字数 1605 阅读 1629

《Unity》

Unity热更新方案

一.何为热更新

  • 概念:
    对于Unity来说的热更新。(在应用有资源或者代码更新之后用户不需要重新下载安装重启客户端,只需要打开客户端下载一些更新资源便可完成更新。)

  • 热更新的好处:
    缩短用户取得新版客户端的流程,改善用户体验

  • 为什么C#脚本不可以直接更新:
    C#是一门编程语言,在每次更改后需要重新在开发环境下编译,然后重新打包成。


二. Unity热更新实现方式

资源热更新:AssetBundle

  • 属性:
    1. Unity自带的资源热更新方式。
    2. 类似一个ZIP压缩文件,里面存储着不同平台的特殊资源。
    3. 既可以更新资源,也可以更新代码。
  • 优点:
    1. 可以实现资源的动态更新。
    2. 根据不同情况可以选择不同的压缩方式,减少包的大小,加快加载速度。
  • 缺点:
    ——
  • 备注:
    1. 在Unity的热更新中AssetBundle是必须要用到的。
    2. 扩展工具:《Unity Asset Bundle Browser tool》

代码热更新(比较常用的几种)

  • AssetBundle
  • ILRuntime
  • Lua

Ⅰ. AssetBundle

  • 属性:
    1. 项目开发中,可以将部分逻辑提取至一个单独的代码库工程中,打包为DLL。
    2. 将DLL打包为AssetBundle
    3. Unity程序动态加载assetBundle中的DLL文件,使用Reflection机制来调用代码。
  • 优点:
    1. 依然使用C#语言开发
  • 缺点:
    1. iOS平台不支持
    2. 这些DLL中的脚本不能在编辑器中使用
    3. 如果脚本在动态Dll里,调用AddComponent()挂此脚本在Prefab上时不能使用AddComponent("SomeScript"),要用AddComponent(Type.GetType("SomeScript"));
    4. 动态DLL里使用[RequireComponent(typeof(SomeScript))]无效
  • 备注:
    1. 这个方案是真正的c#级别的代码热更新,

Ⅱ. ILRunTime

  • 属性:
    1. ILRuntime项目为基于C#的平台(例如Unity)提供了一个纯C#实现,快速、方便且可靠的IL运行时,使得能够在不支持JIT的硬件环境(如iOS)能够实现代码的热更新
  • 优点:
    1. 无缝访问C#工程的现成代码,无需额外抽象脚本API
    2. 直接使用VS2015进行开发,ILRuntime的解译引擎支持.Net 4.6编译的DLL
    3. 执行效率是L#的10-20倍
    4. 选择性的CLR绑定使跨域调用更快速,绑定后跨域调用的性能能达到slua的2倍左右(从脚本调用GameObject之类的接口)
    5. 支持跨域继承
    6. 完整的泛型支持
    7. 拥有Visual Studio的调试插件,可以实现真机源码级调试。支持Visual Studio 2015 Update3 以及Visual Studio 2017
  • 缺点:
    1. 历史短,Git贡献者少,项目考验少
    2. 稳定性的坑还是有一些:通常发生于一些相对高级的语言特性组合,特别是各种反射代码。
    3. 纯计算的性能弱于Lua。
  • 备注:
    1. ILRuntime设计上为了在开发时提供更多的调试支持,在Unity Editor中运行会有很多额外的性能开销,
      因此在Unity Editor中直接测试并不能代表ILRuntime的实际运行性能。

Ⅲ. Lua

  • 属性:
    1. Lua 是一个小巧的脚本语言,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
      2.一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的。
      3.它能够和C/C++进行完美地交互。
  • 优点:
    1. 语言优美、轻巧
    2. 性能优良、速度快
    3. 可扩展性强
    4. Lua是一个已经非常成熟的解决方案,有成熟成功的项目案例。
  • 缺点:
    1. 需要对Lua有一定的熟练程度。
    2. 操作Unity独有值类型,代价昂贵。
  • 备注:
    1. 目前Lua的扩展语言非常多(Xlua,Ulua,ToLua),需要根据项目需求找到一个合适的扩展。
    2. 想要在能支持热更新的同时又保证项目效率,需要对Lua和Unity都有很高的熟练度,了解运行机制的同时看情况适当使用Lua+Unity。
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注