Unity3D:huatuo革命Unity热更新,为什么这么NB?
前言
最近huatuo(华佗)热更新解决方案火爆了unity开发圈,起初我觉得热更新嘛,不就是内置一个脚本解释器+脚本语言开发,如xLua, ILRuntime, puerts。Huatuo又能玩出什么花样,凭什么会这么NB,引起了那么多程序员的关注与称赞呢?带着这些问题我详细的看了huatuo的资料,阅读了示例项目+huatuo源码,我也瞬间成了一位”佗粉”。接下来更新一系列的文字教程+视频教程来详细的讲解huatuo热更新。
对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀
要掌握huatuo热更新,我们先搞懂一些底层的概念与原理,搞懂这些是掌握huatuo的关键。本节我将从以下3个方面来详细的讲解huatuo热更新解决方案:
il2cpp是什么? AOT是什么?
.Net Framework运行时库Mono使用自己的Mono VM。 加上C#本身快速友好的开发能力,最终使得Unity团队在创建之初就决定将Mono,C#作为其核心。
接下来引出重要的一个概念”IL“。IL的全称是 Intermediate Language,很多时候还会看到CIL(Common Intermediate Language,特指在.Net平台下的IL标准)。在Unity中,IL和CIL表示的是同一个东西:它是一种属于通用语言架构和.NET框架的低阶(lowest-level)的编程语言。将.NET框架的语言编译成CIL,然后汇编成字节码。CIL类似一个面向对象的汇编语言,并且它是完全基于堆栈的,它运行在.net虚拟机上。
CLI标准出来后,又出现一个项目:IL2CPP,把IL转成静态的c++代码文件,由本地编译器编译成二进制机器指令。由于C#这样的高级语言都有垃圾回收等机制,所以IL转成静态的c++代码后,还有一个IL2CPP的runtime(IL2CPP VM)用来支撑这些高级语言特性。通过IL2CPP技术,我们IL代码转成本地机器码,获得很好的性能。Unity也采用了这个技术,用unity开发的C#代码可以通过.net 转成IL代码,再通过IL2CPP转成静态c++文件,然后编译成本地机器码运行。为什么Unity采用IL2CPP呢?主要原因有:
Unity基于IL2CPP 的架构原理,如图1.1-1所示:
图1.1-1 Unity IL2CPP 运行示意图
最后一个概念AOT(Ahead of time),AOT技术指的是将高级开发语言直接转成传统的编译型编程语言(如C/C++),再编译成机器指令代码在硬件上运行。IL2CPP可以成为AOT技术。
huatuo热更新的技术原理
huatuo热更的革命性优势
分析完原理后,我们来看下huatuo的革命性优势:
huatuo第2个优势是我们的逻辑代码更新后(1.0版本到2.0版本),如果你发布新版本2.0(重新安装新版本的app),可以直接把更新的逻辑,直接使用AOT编译出来,不用解释执行,从而获得AOT的性能。而基于xLua, ILRuntime的热更方案开发的代码(1.0版本到2.0版本),用户即使重新安装2.0客户端后,还是解释执行,新版本的性能无法达到AOT的性能级别。
huatuo 第3个好处是相比传统的Lua或ILRuntime热更,他能更新任意部分的代码。不用像Lua或ILRuntime一样,分热更代码+框架代码,框架代码有bug还不能热更。
有了这些革命性的优势,你没有理由不关注+使用huatuo。
附:视频教程
页:
[1]