目录

​编辑

​编辑

现状

过去

过去,Unity 选择 Mono

未来

未来,Unity 选择 CoreCLR


现状

Unity 引擎开发团队宣布,他们已开始将 Unity 引擎运行时从 Mono 迁移到 .NET CoreCLR。

此外,他们还会提供融合 JIT 和 AOT 的解决方案——即集成 IL2CPP 和 Burst,从而达成编译时间效率和代码生成质量之间的最佳平衡。

目前,Unity 迁移到 .NET CoreCLR 运行时所涉及的工作已经开始。团队表示这是一个非常具有挑战性的旅程,为了能够成功完成迁移,他们会逐步解决这个问题,并确保能够以保持现有 Unity 项目稳定性的方式渐进发布更新。

因此,开发团队会分多个阶段完成此次迁移:

  • 首先,为桌面平台的独立 player 提供对 .NET CoreCLR 的支持。基于此,开发者可以在 player 设置中选择此运行时以及现有的 Mono 和 IL2CPP 后端。
    团队认为,此阶段可以帮助他们迁移 Unity 引擎的核心部分(比编辑器部分小得多),并有望解决此迁移所涉及的大部分技术挑战。开发者在这个阶段仍将通过 .NET Standard 2.1 API 访问 .NET 运行时,他们的目标是在 2023 年发布新的运行时。
  • 然后在第二阶段,团队会把 Unity 编辑器移植到 .NET CoreCLR,同时取消对 .NET Mono 运行时的支持。第二阶段的挑战是,如何在不使用 AppDomain 的情况下在编辑器中重新加载脚本,并完成向 .NET CoreCLR 的切换。它还将涉及升级 IL2CPP 以支持来自 dotnet/runtime 仓库的基类库。开发者最终可以访问完整的 .NET 7.x 或 8.0 API。Unity 团队计划在 2024 年发布新编辑器。

对外,Unity 正在与 Microsoft 和 JetBrains 等行业合作伙伴合作,加大对开源社区的参与力度,以确保 Unity 创作者能使用最新的 .NET 技术。

过去

过去,Unity 选择 Mono

早在2008年,Unity就宣布和Mono合作,但后续Mono新版本使用SGen GC取代Boehm GC时,Unity不想再次付许可证费用。直到当下(2021年7月),Unity依然依赖 Boehm GC。这是一种没有分代的(扫描慢)、Mark-Sweep的(会有内存碎片问题)、保守(不能精确地识别垃圾)的GC。

对于Boehm GC造成的性能问题,Unity官方有一些折中方案。

  • 先尽量分配好所有对象的内存,然后关闭GC,等到合适的时机(如关卡结束),再开启GC;
  • 默认开启 incremental 模式分帧处理,注意如果在期间有大量引用关系的改写,分帧处理反而会有大量额外性能损耗(主要来自写屏障)

未来

未来,Unity 选择 CoreCLR

自2016年微软将Mono的许可证由GPL改为MIT以来,Unity也加入了 .NET Foundation,开始将最新的Mono集成到自己的引擎中。但随着微软构筑开源的大一统解决方案 .NET 5,Unity似乎改变了原先的想法。从官方论坛中可以总结出他们的规划:

  1. 首先集成最新的Mono,因为其支持 .NET Core 的BCL;
  2. 然后将自家的 IL2CPP 也更新(其依赖Mono的输出结果);
  3. Unity 2021.2开始完全支持.NET Standard 2.1,C#8和部分C#9(Span,Range,default interface methods),其中Span的影响非常深远,目前和BurstCompiler的NativeArray还不能无缝转换,最大难点是Span并没有自己的memory但后者有;
  4. 支持 C#9/10,基于前面的工作,这一步并不难;
  5. 支持 .NET 6(跳过 .NET 5)。
  6. 用CoreCLR替代Mono(GC也相应升级为CoreCLR GC),在此之前,GC并不会升级为        Mono的SGen。这项工作会持续比较久,目前还没有ETA。Unity大部分代码是C++,C#只有薄  薄的一层(但是越来越多的代码在切换到 C#)。在切换到CoreCLR后,其访问Managed Object的方式需要彻底改变,因此改动会很大。总体顺序是:先将Player替换为CoreCLR,然后将Editor也替换掉。
  • 存在的两个难题:
  • 所有dll必须重新编译
  • 要修改 UnityEditor 中大量使用 AppDomain进行hot reload的部分(AppDomain在新版.NET中几乎被废弃,出处));目前的替代类 AssemblyLoadContext 并不能提供之前 AppDomain Reload的所有功能

In general Assembly Load Context is cooperative, and any remaining references (static fields, GC Handles, running threads, etc) will prevent the code from being unloaded.

长远来看,Unity该团队已经意识到自己当年的一些轮子(Coroutine, Customized Boehm GC, IL2CPP, asmdef等)在近几年来.NET运行时、工具链和整套生态的飞速发展面前显得有些陈旧,正在致力于向开发者提供原汁原味的.NET开发体验(出处),同时尽量不颠覆原有的使用习惯(例如出于这些原因,UPM不会和NuGet双向互通)。

另外,Unity团队还有很多高优先级的feature要做,总之,还是希望Unity越来越好吧!

Unity 引擎开始从 Mono 迁移到 .NET CoreCLR相关推荐

  1. Unity引擎音效系统简介

    Unity引擎音效系统简介 音频文件设置选项: Force To Mono:多声道转单声道 Normalize:当强制转为单声道时,混合过程中被标准化. Load In Background:在后台加 ...

  2. Unity引擎基础补充

    Unity引擎基础补充 本博客将对之前的Unity脚本,3D数学基础博客内容做一定的补充.所以部分知识点可能并不全. 使用Unity的API,我们要清楚各个参数其代表的含义. 文章目录 Unity引擎 ...

  3. 6.15 Unity引擎渲染效率全解析

    UWA新晋主播赵福恺从Unity渲染模块中的各种渲染效果性能.PBR渲染性能以及阴影的渲染性能三个角度分别进行了详细的分析总结.为响应各大听众的需求,小编奉上完整视频回顾,同时也向看完直播才下班的五好 ...

  4. UNITY引擎变量调用产生不必要内存分配

    UNITY引擎变量调用产生不必要内存分配 https://unity3d.com/de/learn/tutorials/topics/performance-optimization/optimizi ...

  5. Unity引擎及编辑器C#源代码发布

    3月23日我们在GitHub上发布了Unity引擎和编辑器的C#源代码,仅供Unity学习参考使用. 为何如此决定 为了了解或改进自己的Unity项目,一直以来有用户对Unity .NET程序集反汇编 ...

  6. 【Unity开源项目精选】Unity引擎源码的C#部分

    洪流学堂,让你快人几步.你好,我是你的技术探路者郑洪智,你可以叫我大智. 今天给你分享一个Unity开源项目,我们一起来看看吧! Unity引擎源码的C#部分 Unity 引擎和编辑器源代码的 C# ...

  7. Xunity.autotranslator机翻unity引擎的游戏

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.Xunity.autotranslator是什么? 二.使用步骤 1.下载 2.运行程序 3运行游戏 总结 前言 ...

  8. Mediapipe+OpenCV与Unity引擎实现动作捕捉

    前言 之前写了一篇文章: Mediapipe+OpenCV图像识别技术与Unity引擎的结合 其中的技术是Python利用OpenCV图像捕捉,配合强大的Mediapipe库来实现人体动作检测与识别: ...

  9. Unity引擎与Cocos引擎的区别

    Cocos引擎包括两部分,一是cocos2d-x引擎本身,提供了游戏所需要的渲染.碰撞检测.场景管理等功能.二是cocos studio编辑器,提供了游戏场景编辑的功能,当然只能编辑2d的场景. Un ...

最新文章

  1. Excel VBA林木冠幅、分枝胸径字符串的拆解
  2. 阿里2022“研究型实习生”计划公布,开放200多个科研选题
  3. Sync 攻击原理及防范技术
  4. C++ string中的几个小陷阱,你掉进过吗?
  5. SpringMVC启动后自动执行
  6. dos下 和 批处理中的 for 语句的基本用法
  7. 8 一点就消失_消失的莉莉安(25)
  8. matlab流量结构分析,科学网-分享求解“结构分解分析(SDA)”各项均值的MATLAB程序-计军平的博文...
  9. FineBI与FineReport对比
  10. php上传文件的目录,php文件上传及下载附带显示文件及目录功能
  11. HALCON 21.11:深度学习笔记---有监督训练(6)
  12. 【世间万象】五甲万科董事长孙凯歌:五甲有红旗情节
  13. 2015(4)软件工程,软件运行与维护,新旧系统转换策略,遗留系统的演化策略,数据转换与数据迁移...
  14. 高性能MySQL(第2版)中文版pdf
  15. Oracle.start with … connect by [… and] prior…order siblings by …
  16. display可以控制标签的显示模式
  17. 高数_第2章多元函数微分学__偏导数的几何应用_空间曲线的切线与法平面
  18. 20003.数据结构C++ 顺序表
  19. python温度转换代码
  20. java从小白到架构师学习路线

热门文章

  1. Oracle无法标识锁定数据文件,启动错误ORA-01157: 无法标识/锁定数据文件 解决方案...
  2. 5.10 数据的升序和降序排序 [原创Excel教程]
  3. 眼睛里10年的“肉芽”长大了,这究竟是怎么回事?
  4. java语言中标识符大小写不敏感_下列叙述中,正确的是()。A.Java语言的标识符是区分大小写的B.源文件名与public类名可...
  5. r语言中残差与回归值的残差图_独家 | 手把手教你用R语言做回归后的残差分析(附代码)-阿里云开发者社区...
  6. 【原创】超级详细的iPhone铃声制作、导入、设置全过程教程
  7. ipad能不能装python_ipad能下载python么
  8. 华为机试HJ55:挑7
  9. 《激活个体》读书笔记
  10. 腾讯云图,让数据说话