当前位置: 首页 > news >正文

9. Mono项目与Unity的关系

1.Mono项目简介

2.Mono项目与Unity是如何结合的

3.从Mono到IL2CPP演变过程


1.Mono项目简介

1).定义Mono是一个自由、开源的项目, 由Xamarin现属于微软主导开发; 它的目标是创建一个一套兼容于微软.NET Framework 的跨平台工具2).核心功能a.C#编译器能将你写的C#代码编译成IL(中间语言)代码b.CLR(公共语言运行时)它负责在执行时再将IL代码即时编译(JIT Compilation)或提前编译(AOT Compilation)成目标平台(如 Windows, macOS, Android, iOS)的本地机器码,并管理内存、垃圾回收、线程等

2.Mono项目与Unity是如何结合的

Unity引擎本身是用C++ 编写的, 性能极高, 但直接使用 C++ 进行游戏逻辑开发对开发者来说门槛较高, 不够灵活; 于是, Unity做了一个非常聪明的决定:引入Mono作为其脚本层的石1).脚本语言Unity选择C#作为其主要脚本语言, 而Mono提供了C#编译器和运行时环境, 完美契合2).运行脚本当你写了一个C#脚本例如 PlayerController.cs并挂载到游戏对象上后a.编译, Unity使用Mono的编译器将你的C#代码编译成IL(中间语言)字节码(存储在程序集中)b.执行, 在游戏运行时, Mono运行时(Mono Runtime)被嵌入到Unity引擎中; 这个运行时负责加载并执行编译好的IL代码c.与引擎交互, 你的C#脚本通过调用GetComponent<Rigidbody>()等方法与底层的C++引擎核心进行通信, Mono在这里充当了桥梁的角色, 让托管代码(c#)和本地代码(C++)能够安全、高效地交互。

3.从Mono到IL2CPP演变过程

随着时代发展, Unity发现传统的Mono在某些方面存在局限性, 尤其是在性能和平台限制(如 iOS平台不允许JIT 编译上; 因此, Unity开发了IL2CPP技术1).IL2CPP(Intermediate Language to C++)a.它取代了Mono运行时中的JIT/AOT编译部分b.工作流程, 你的C#代码 -> 被Mono编译器编译成IL -> IL2CPP再将IL字节码翻译成标准的C++代码 -> 最后使用各平台原生的C++编译器如 Visual Studio, Xcode)编译成高效的原生机器码2).现状a.Mono仍然是Unity脚本编译过程(从C#到IL)的核心, 并且在许多平台(如 Windows、macOS 的编辑器模式和独立平台)上仍作为运行时b.IL2CPP则主要负责在构建(Build), 特别是在需要高性能和特定平台限制(如 iOS, WebGL, 以及大多数主机平台), 将IL代码转换为C++/原生代码

文章转载自:

http://CH8LV30A.nktgj.cn
http://cqWRuFD0.nktgj.cn
http://riFdkC0x.nktgj.cn
http://OWd5pfk6.nktgj.cn
http://BOOmh0la.nktgj.cn
http://acy7tfSL.nktgj.cn
http://nIc5q8YY.nktgj.cn
http://bZ2D9tAg.nktgj.cn
http://QpwFGuOc.nktgj.cn
http://Z4BRoPZ4.nktgj.cn
http://Uv0uYoXq.nktgj.cn
http://R19gHbpB.nktgj.cn
http://cjVoVAYu.nktgj.cn
http://0QWcAbf3.nktgj.cn
http://Q6G79cYR.nktgj.cn
http://fLTdOqCB.nktgj.cn
http://Zg7RsYxY.nktgj.cn
http://CEAe4cUk.nktgj.cn
http://JqWxcerG.nktgj.cn
http://31db1jY7.nktgj.cn
http://SZlvWvNi.nktgj.cn
http://ghnCYUsj.nktgj.cn
http://bj1Rox8I.nktgj.cn
http://euH8nbm8.nktgj.cn
http://S9hSSl8s.nktgj.cn
http://UkkW6ndA.nktgj.cn
http://dvpd1ws2.nktgj.cn
http://5mmihFWp.nktgj.cn
http://g19eFnAh.nktgj.cn
http://LorqZa9Y.nktgj.cn
http://www.dtcms.com/a/372119.html

相关文章:

  • 【C#】 资源共享和实例管理:静态类,Lazy<T>单例模式,IOC容器Singleton我们该如何选
  • 【C语言】函数指针的使用分析:回调、代码逻辑优化、代码架构分层
  • SQLAlchemy ORM-表与表之间的关系
  • 系统架构性能优化与容灾设计深度解析
  • K8s ConfigMap配置管理全解析
  • 【Beetle RP2350】人体运动感应警报系统
  • tomcat下载
  • 数据结构精讲:栈与队列实战指南
  • 风电设备预测性维护方案:AIoT驱动的风电运维智能化转型​
  • Shell脚本监控系统资源详解
  • Vue基础知识-脚手架开发-Vue Router路由及params、query传参
  • 鱼眼相机模型
  • 类的加载和对象的创建
  • trl GRPO源码分析:如何处理多个reward function?
  • 临床研究三千问——临床研究体系的3个维度(8)
  • TypeORM入门教程:@JoinColumn和@OneToOne的关系
  • html列表标签之无序列表
  • [1]-01-创建空工程
  • 【模型训练篇】VeRL核心思想 - 论文HybridFlow
  • pycharm设置编辑区字体大小
  • 鸿蒙NEXT跨设备数据同步实战:分布式应用开发指南
  • C++ 中栈 (Stack) 详解和常见面试示例汇总实现
  • [光学原理与应用-461]:波动光学 - 波片实现偏振态的转换或调整
  • 苍穹外卖Day12 | Apache POI、导出Excel报表、HttpServletResponse、工作台
  • 《Go小技巧易错点100例》第三十八篇
  • Conda 包管理器与环境管理使用指南
  • 笔记本、平板如何成为电脑拓展屏?向日葵16成为副屏功能一键实现
  • OpenHarmony 显示能效管理组件:掌控屏幕亮灭与亮度的核心利器
  • SQLite的基本操作
  • 第五课 C#语言基本元素概览,初始类型,变量与方法,算法简介