huatuo

Unity 全平台原生 c# 热更方案
授权协议 MIT
开发语言 C/C++
所属分类 游戏/娱乐、 游戏模拟器/工具/引擎
软件类型 开源软件
地区 不详
投 递 者 令狐跃
操作系统 跨平台
开源组织
适用人群 未知
 软件概览

 

huatuo是一个特性完整、零成本、高性能、低内存的 Unity 全平台原生 c# 热更方案。

huatuo 扩充了 il2cpp的代码,使它由纯 AOT runtime 变成 ‘AOT+Interpreter’  混合 runtime,进而原生支持动态加载assembly,使得基于 il2cpp backend 打包的游戏不仅能在 Android 平台,也能在 IOS、Consoles 等限制了 JIT 的平台上高效地以 AOT+interpreter 混合模式执行,从底层彻底支持了热更新。

huatuo 开创性地实现了 differential hybrid dll 技术 ====,可以对 AOT dll 任意增删改,huatuo 会智能地让变化或者新增的类和函数以 interpreter 模式运行,但未改动的类和函数以 AOT 方式运行,让热更新的游戏逻辑的运行性能基本达到原生 AOT 的水平。

特性

  • 特性完整。 近乎完整实现了 ECMA-335规范,除了 下文中"限制和注意事项" 之外的特性都支持。
  • 零学习和使用成本。 huatuo 将纯 AOT runtime 增强为完整的 runtime,使得热更新代码与 AOT 代码无缝工作。脚本类与 AOT 类在同一个运行时内,可以随意写继承、反射、多线程(volatile、ThreadStatic、Task、async)之类的代码。不需要额外写任何特殊代码、没有代码生成,也没有什么特殊限制。
  • 执行高效。实现了一个极其高效的寄存器解释器,所有指标都大幅优于其他热更新方案。性能测试报告
  • 内存高效。 热更新脚本中定义的类跟普通 c# 类占用一样的内存空间,远优于其他热更新方案。内存占用报告
  • 原生支持 hotfix 修复 AOT 部分代码。几乎不增加任何开发和运行开销。
  • 开创性地实现了 differential hybrid dll 技术。即可以将某个热更新dll先AOT形式打包,后面可以对该dll任意增删改,huatuo会智能地让变化或者新增的类和函数以interpreter模式运行,但未改动的类和函数以AOT方式运行。这意味着热更新的游戏逻辑的运行性能将接近原生AOT的水平。

工作原理

huatuo 从 mono 的 hybrid mode execution 技术中得到启发,为 unity 的 il2cpp 之类的 AOT runtime 额外提供了interpreter 模块,将它们由纯 AOT 运行时改造为 "AOT + Interpreter" 混合运行方式。

更具体地说,huatuo做了以下几点工作:

  • 实现了一个高效的元数据(dll)解析库
  • 改造了元数据管理模块,实现了元数据的动态注册
  • 实现了一个IL指令集到自定义的寄存器指令集的compiler
  • 实现了一个高效的寄存器解释器
  • 额外提供大量的 instinct 函数,提升解释器性能
  • 提供 hotfix AOT 的支持

文档

  • 一.前言 HybridCLR(代号wolong)是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案。 官方提供了完整的教程:HybridCLR快速上手 官方还提供了一个简易的小Demo,演示了如何使用HybridCLR实现热更新。hybridclr_trial 官方文档其实已经非常详细了,我写本文目的主要为了记录一下我的接入过程。 我们可以下载官方的示例Demo,我

  • 这两年,各种Unity热更新方案如雨后春笋般出来了,今天来写篇文章来对比一下Unity各大热更新方案的优缺点。目前主流的Unity热更新的方案有: Lua系解决方案: 内置一个Lua虚拟机,做好UnityEngine与C#框架的Lua导出。典型的框架有xLua, uLua,大体都差不多。 对惹,这里有一个游戏开发交流小组,希望大家可以点击进来一起交流一下开发经验呀 ILRuntime解决方案: 内

  • 华佗_github_地址 华佗(huatuo)包安装 在unity项目的packages目录的manifest.json增加 { "dependencies": { }, "scopedRegistries": [ { "name": "package.openupm.cn", "url": "https://package.open

  • 一、背景介绍 距离《ET7.0+HybridCLR(huatuo)热更教程》这篇教程时间过了两个多月了,特别HybridCLR版本迭代很快,ET官方也升级到最新的7.2版本了。很多工具流都变了,因此用最新的ET版本重新跑了接入HybridCLR流程,记录一些变动操作内容,文章结尾附带github完整的项目工程。 二、工程环境 首先去官网下载最新的ET(目前ET的版本是7.2),然后接入Hybrid

  • 最近huatuo(华佗)热更新解决方案火爆了unity开发圈,起初我觉得热更新嘛,不就是内置一个脚本解释器+脚本语言开发,如xLua, ILRuntime, puerts。Huatuo又能玩出什么花样,凭什么会这么NB,引起了那么多程序员的关注与称赞呢?带着这些问题我详细的看了huatuo的资料,阅读了示例项目+huatuo源码,我也瞬间成了一位”佗粉”。接下来更新一系列的文字教程+视频教程来详细

 相关资料
  • 我正在寻找使用ReactNative或原生平台(iOS和Android)创建一个BLE移动应用程序的利弊。 我应该遵循哪种方法?有人能和ReactNative分享他们的经验吗?我在这两个原生平台上都工作过,它给了我很好的效果,但是对于我的新项目,我考虑的是ReactNative,因为它有单一的代码库,相对来说比在iOS和Android上单独工作花费的精力要少。 BLE应用程序也有这些优势吗?或者它

  • 游戏发布到原生平台后,由于运行环境不同,可能会出现在浏览器预览时无法重现的 Bug,这时我们就必须直接在原生平台下进行调试。Cocos Creator 可以很方便地对原生平台中的 JavaScript 进行远程调试。 模拟器调试 一般来说,原生平台的大多数问题都可以在模拟器中进行重现,我们可以先在模拟器中测试,有问题的话直接在模拟器中调试即可。模拟器调试有以下两种方法。 方法一 首先在编辑器工具栏

  • 游戏发布到原生平台后,由于运行环境不同,可能会出现在浏览器预览时无法重现的 Bug,这时我们就必须直接在原生平台下进行调试。Cocos Creator 3D 可以很方便地对原生平台中的 JavaScript 进行远程调试。 iOS 和 Android 真机调试 如果游戏只有在真机上才能运行,那就必须用真机对打包后的游戏进行调试。调试步骤如下: 确保 Android/iOS 设备与 Windows

  • Cocos Creator 3D 自 v1.0.3 起正式支持原生平台,点击菜单栏的 项目 -> 构建发布 选项,打开构建发布面板,参照文档配置完项目信息后即可打包。 支持的原生平台包括 Android、iOS、Mac、Windows 四个,其中 iOS、Mac 和 Windows 的选项只能在相应的操作系统中才会出现,目前原生平台是集合在一起打包的,可以在同一界面上配置各个原生平台的参数选项,打

  • 点击菜单栏的 项目 -> 构建发布,打开构建发布面板。 目前可以选择的原生平台包括 Android、iOS、Mac、Windows 四个,其中发布到 iOS、Mac 和 Windows 的选项只能在相应的操作系统中才会出现。 构建选项 合并图集中的 SpriteFrame 将图集中的全部 SpriteFrame 合并到同一个包中。默认关闭,启用后能够减少热更新时需要下载的 SpriteFrame

  • 第一章 SonarQube简介 1.1 SonarQube介绍 Sonar 是一个用于代码质量管理的开源平台,用于管理源代码的质量 通过插件形式,可以支持包括 java,C#,C/C++,PL/SQL,Cobol,JavaScrip,Groovy,HTML,Python,PHP,XML等等二十几种编程语言的代码质量管理与检测 Sonar可以从以下七个维度检测代码质量 不遵循代码标准 sonar可以

  • 我的2D平台游戏有问题。由于我刚刚开始使用c,因此我在瓷砖碰撞方面遇到了麻烦。我能够阻止玩家进入图块,并且能够远离它,但不知何故,他不能沿着图块移动。 此功能用于检查新位置是否位于实心瓷砖内: 空地图::drawColMap(播放器 } 以下是移动播放器的代码: void Player::update() { } 感谢任何帮助! //编辑1 我试着记录碰撞,它显示即使我不按任何键,玩家仍然在碰撞区

  • 一面6.14 45min 挖简历项目 机器学习线性模型口诉原理(简历提到机器学习) 手写最大子数组和(ac通过),要求nlogn复杂度。(提示递归,未答出) 无八股 二面6.18 1h 挖简历项目(详细介绍项目、随口问了下springboot与jdk版本 、MongoDB原理,elasticsaerch等) 场景题:抢购平台,有哪些与异常相关的字段,比如用户订单等信息。如何设计异常检测大数据平台