Mono简介、Unity的跨平台、Unity程序从编辑到运行。

编译unity-mono( 写给超级初学者的朋友) 为什么要编译mono?相比看到这篇文章的朋友应该都不需要再多问为什么,那么为了呼应标题,笔者还是想再简明扼要的阐述一下,以便不知道干啥的朋友还可以知道要干啥. unity生成的apk包,实际上就是一个压缩文件,我们可以直接解压出来,解压出来之后我们可以找到这样的一个目录:assets\bin\Data\Managed,在这个目录之下都是一些dll,然后这些dll是什么呢?听笔者接着说,倘若我们在 阅读详情

一、Mono简介

mono其实是微软的.net的另一个实现,但是mono它跨平台。

mono包括 c#编译器、mono运行时,mono类库、基础类库。

c#编译器,目前使用的是mcs,主要将c#代码编译成CIL的byte code(一般以.exe或者.dll的形式存在)。

mono运行时中也有编译器(转译),将byte code转译成运行平台上的原生码(可能是0101...之类的?),分为三种形式,即时编译(JIT)、提前编译(AOT)和完全提前编译(Full-AOT)。这一步很重要,因为原生码直接作用于硬件,所以可以加快运行速度。这样Unity就集合了高级语言(c#/JS)的优点,开发效率高,也集合了低级语言的优点,运行速度快。

动态编译(JIT)效率慢,因为要一边编译,一边处理代码逻辑。IOS不允许动态编译,所以Unity不提供热更新。但是Android则允许动态编译。(怪不得IOS系统快,都是提前编译好的)

静态编译(AOT)其实是半静态编译,因为它可以保留代码,而只提前编译元数据信息,而且也是借助JIT引擎编译的。

完全静态编译(Full-AOT),ios上主要使用的就是这种转译方式,提前编译好,到时候只加载本地映像。

 

 

mono 运行时还有一个重要的作用就是垃圾自动回收机制,有两种,一种是分代回收机制,一种是贝母回收机制。(感觉和java很像,不需要开发人员自己回收,虚拟机会回收)

二、Unity跨平台

Unity之所以能跨平台是因为有通用中间语言(CIL),CIL是一种可读性比较低的面向对象的语言。它是基于堆栈的,与具体CPU中的寄存器无关。(所以JAVA也是基于堆栈的),CIL运行在Mono运行时(虚拟机)上,其实它能运行在任何支持CLI(通用语言基础结构)的平台上,包括.NET与Mono,所以能实现跨平台。即 虽然IOS系统不能运行.exe文件,但是mono虚拟机可以,所以可以跨平台。

三、Unity程序从编辑到运行

c#脚本被mcs编译成CIL(其实是CIL assembly),以.exe或者.dll的形式存在,然后发布的应用中因为带有Mono运行时(虚拟机),其中的JIT或者Full-AOT引擎会将CIL转译成目标平台上的原生码,供不同的操作系统运行。

 

本文完,若有疑问或建议,欢迎留言!

Unity+Mono断点调试步骤 Unity3D是一个基于Mono的跨平台游戏引擎,支持 PC 、MAC 、Android 、IOS 等多种平台,其 3.0 以后的版本支持用MonoDevelop调试,很多人安装了之后发现 MonoDevelop 的调试按钮是灰色的,无法进行调试,通过看官方文档和测试,发现正确的调试步骤如下: 1.MonoDevelop 的安装与设置: (1).下载并安装 Unity3D 以及其内置的 阅读详情

相关推荐

基于Mono的Unity编辑器加密方案

引言 该博客是写给需要保护自己知识产权的游戏开发者,本文加密方式相对简单易懂,但起到的效果足以让大多数小白窃取者望而却步 Windows加密篇 基于Unity2017 一.准备 1.Mono源码(根据自己的Unity版本下载相应源码): https://github.com/Unity-Technologies/mono 2.Visual Studio 2010(2017的Mono版本需要用此...

supermanbr的专栏 775

Unity C# 和 Mono简史

一般Unity游戏开发,都使用C#作为主要开发语言。虽然Unity本身支持Unity(一种Java的扩展)和Boo(一种受Python启发的语言),但是在正常生产实践中,还是会使用C#作为主要开发语言。 什么是C#? C# 是微软推出的一种基于 .NET 框架的、面向对象的高级编程语言。微软在 2000 年发布了这种语言,希望借助这种语言来取代Java,更多详细的介绍可以参看C#Wiki。 为什么是C#? 因为C#的跨平台特性可以解决Unity引擎的跨平台支持问题。 其实确切的说,跨平台的并不是C

Peter的博客 6308

Unity脚本运行时Mono核心原理与性能优化实战指南

在游戏开发领域,脚本运行时是连接高级编程语言与底层引擎核心的关键组件,它决定了代码的执行效率与跨平台兼容性。其核心原理在于将C#等高级语言编译为中间字节码,再通过即时编译或提前编译技术转换为目标平台的原生机器码执行,从而实现“一次编写,到处运行”的技术愿景。这一机制不仅大幅提升了开发效率,还通过托管环境提供了自动内存管理等便利特性,对大型项目的可维护性至关重要。在Unity引擎中,Mono作为其长期使用的默认脚本后端,深刻影响了开发工作流与性能特征。开发者需特别关注其垃圾回收机制带来的内存管理挑战,例如在U

weixin_30546189的博客 566

Unity 中的 .NET、Mono 和 IL2CPP

Unity 中的 .NET 概述; Mono 和 IL2CPP 对比; IL2CPP 原理概述等。

NRatel的博客 4966

Unity学习笔记(01):Unity概述、Unity编辑器界面及布局设置、视图、按钮功能

(该笔记主要是给自己看的 逻辑略微混乱潦草 望谅解) 一、Unity概述 Unity特性:跨平台开发 Unity支持多个平台 包括windows mac linux等pc操作平台 对web平台的支持 需要安装WebPlayer 类似于FlashPlayer 支持Android ios等移动操作平台 支持webGL的平台 何为mono mono是实现了跨平台的.NET框架 原本.NET只能Windows上用 而使用mono开发的.NET就能用于Linux等各种平台 而mono衍生出了两个大项目 一个是跨移动A

"✧treasure mountain✧" 4156

Unity DOTS Burst 运行分析

Unity DOTS Burst 解密

zhhispig的专栏 5140

Unity3D - Unity游戏Mono内存管理与泄漏

转载地址:http://blog.youkuaiyun.com/honey199396/article/details/52386731 重要内容已经“红色加粗”,希望对大家有帮助! WeTest导读 内存是游戏的硬伤,如果没有做好内存的管理问题,游戏极有可能会出现卡顿,闪退等影响用户体验的现象。本文介绍了在腾讯游戏在Unity游戏开发过程中常见的Mono内存管理问题,并介绍了一系列解决

PAL717的博客 808

Unity跨平台开发核心原理:从Mono/IL2CPP到平台适配实战解析

跨平台开发是现代游戏与应用开发的核心需求,其本质在于解决同一套代码在不同操作系统和硬件架构上的兼容性问题。其技术原理主要围绕代码转换与平台抽象两大层面:通过脚本后端将高级语言编译为中间语言或直接转换为平台原生代码,同时通过统一的运行时接口屏蔽底层系统差异。这一技术方案为开发者带来了巨大的工程价值,能够显著降低多平台适配成本,提升代码复用率。在游戏开发、移动应用及XR内容创作等场景中,跨平台能力已成为基础要求。本文聚焦Unity引擎的跨平台实现,深入剖析其Mono与IL2CPP两大脚本后端的工作机制,并结合纹

weixin_34297704的博客 483

Unity 中的Mono和IL2CPP

Mono的设计目标是使开发者能够在不同的操作系统和硬件平台上编写和运行相同的脚本代码,从而实现跨平台开发的便利性。Mono的IL支持使得开发者可以在运行时动态生成和执行代码,从而实现更高级的编程技术和动态性。总结起来,Mono和IL2CPP是Unity中常用的脚本运行时技术,它们分别具有各自的功能和优势。通过深入了解这两者的特点和适用场景,开发者可以做出明智的选择,并优化游戏的性能和开发效率。在Unity游戏引擎中,Mono和IL2CPP是两种常用的脚本运行时技术,它们在游戏开发过程中扮演着重要的角色。

weixin_44806700的博客 2434

Unity跨平台基本原理

Unity跨平台的基本原理主要基于其底层架构和Mono的运行机制。以下是对Unity跨平台基本原理的详细阐述。

weixin_67674686的博客 2061

Pytorch版deeplabv3+环境配置训练自己的数据集

参考:https://blog.youkuaiyun.com/qq_36766560/article/details/110009622?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522161594607816780266214828%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=161594607816780266214828

Ring__Rain的博客 1万+

Unity当中的跨平台

Unity通过Mono和IL2CPP两种脚本后端实现跨平台能力。编辑阶段使用Mono进行JIT编译,将C#代码转换为IL中间语言,由Mono虚拟机动态转换为平台机器码执行。发布阶段可选择IL2CPP,将IL转换为C++代码再编译为各平台原生机器码,简化多平台适配。此外,Unity还通过抽象图形API、统一资源系统等技术消除平台差异,使同一套代码能运行在不同操作系统和硬件架构上。这套机制类似于Java的"一次编写,到处运行"理念,为开发者提供了高效的跨平台开发环境。

weixin_44909899的博客 2418

实战分享:如何用Dify和MaxKb实现文档智能切分与高效检索(附代码解析)

本文详细介绍了如何结合Dify和MaxKB构建文档智能切分与高效检索系统。针对传统全文检索的不足,提出了结构感知的文档切分方案,通过解析文档层级关系并构建标题链,实现了精准的章节级检索。文章包含完整的代码实现,涵盖文档解析、智能切分、向量化策略及双索引优化,并分享了性能调优和生产环境实践经验。

qsc90123456的博客 543

在Unity编辑模式下运行Mono中的方法

代码写的很随便也很丑陋,望包涵,其次EditorUpdateMethodManager也是可以继续扩展的,我只写了Update的,也可以写其他时机的,在EditorUpdateMethodAttribut里加个触发时机的枚举之类的,然后在Manager里根据枚举的值来实现在不同的地方触发,不过感觉作用不大于是也懒得写了。

timathy33的博客 1145

CiteSpace基础操作(CNKI数据的导入分析)(一)

1 Cite Space简单介绍 2 文献导入 2.1 打开知网,选择高级检索

m0_50990607的博客 5万+

Excel数据清洗实战:8个必学函数搞定90%的脏数据问题(附案例)

本文通过一个完整的销售数据清洗案例,详细讲解了如何组合使用TRIM、CLEAN、SUBSTITUTE等8个核心Excel函数,构建自动化清洗流水线,高效解决日常办公中90%的脏数据问题,从而将时间留给更有价值的分析工作。

weixin_29215391的博客 581

Unity进阶--C#补充知识点--【Unity跨平台的原理】Mono与IL2CPP

本文总结了Unity跨平台原理的两种实现方式:Mono和IL2CPP。Mono通过JIT即时编译实现跨平台,支持动态生成代码,但维护成本高且性能较低;IL2CPP采用AOT提前编译为C++代码,性能更高但无法运行时动态生成类型。文章详细比较了两者的优缺点,并针对IL2CPP的类型裁剪和泛型问题提供了解决方案:使用link.xml文件保留必要类型,以及显式声明泛型类和方法。最后指出,IL2CPP因其高效和易维护性成为更优选择,但仍需注意其局限性。

misco43的博客 2243

【项目分享】RailTracker: 火车票务数据采集与分析

从12306使用爬虫爬取火车站及车次信息、火车票价 通过本项目,我们将带领访问者手把手完成火车票数据采集、数据清洗、数据集成、可视化的一整个流程!

zhushatong的博客 3343

Unity与Mono的关系

一、Mono简介 https://baike.baidu.com/item/mono/60423?fr=aladdin Mono包括 c#编译器、Mono运行时,Mono类库、基础类库。 c#编译器,目前使用的是mcs,主要将c#项目编译成相应的程序集 Mono运行时中也有编译器,负责将程序集编译译成运行平台上的本机代码,分为三种形式,即时编译(JIT)、提前编译(AOT)和完全提前编译(Full-AOT)。这一步很重要,因为本机代码直接作用于硬件,所以可以加快运行速度。这样Unity就集合了高级语

Romain的博客 1560

重构工业交互体验:响应式数据可视化大屏解决方案

从智慧园区到数据中心,从水务监控到风力发电场景,HT 通过 2D/3D 组态技术与响应式布局机制,让数据以更灵活、更精准的方式呈现场景动态 —— 这正是 HT 技术在工业可视化领域的核心价值。例如,在智慧楼宇监控系统中,HT 引擎可实时渲染建筑结构、设备状态与数据流,同时确保画面在不同尺寸屏幕上的一致性。以某工业数据中心大屏为例,HT 通过暗红色主调搭配工业元素,结合粉色与黄色点缀,打破传统深蓝色大屏的视觉定式,同时通过矢量图形确保色彩在不同亮度下的辨识度 —— 这正是 HT 技术在视觉设计上的独特优势。

Hightopo的博客 888

Amesim与Simulink联合仿真:S-Function接口配置与实战避坑指南

本文详细介绍了Amesim与Simulink联合仿真中S-Function接口的配置方法与实战避坑指南。从环境搭建、编译器配置到S-Function接口实战,逐步解析关键步骤与常见问题解决方案,帮助工程师高效实现多领域系统仿真,特别适合汽车、航空航天等复杂系统建模场景。

weixin_29173777的博客 343

Unity 引擎开始从 Mono 迁移到 .NET CoreCLR

Unity 引擎开始从 Mono 迁移到 .NET CoreCLR的解读

YF云飞的博客 4204

用 MATLAB 实现鼻子和嘴的检测

为了方便起见,这里我们使用了 CascadeObjectDetector 中自带的 haarcascade_frontalface_alt2.xml 文件,该文件包含了多个包含鼻子和嘴的样本图像。其中 bbox 变量表示检测到的所有鼻子和嘴的边界框信息。在图像处理中,鼻子和嘴的检测是十分重要的一项任务。本文将介绍如何使用 MATLAB 实现鼻子和嘴的检测,并提供相应的源代码。然后,我们可以调用之前创建的 detector 对象来进行鼻子和嘴的检测。综上所述,我们可以使用以上代码实现鼻子和嘴的检测。

qq_39605374的博客 256

Unity跨平台开发核心:.Net运行时、IL2CPP与Mono后端深度解析

在软件开发领域,跨平台技术是实现代码一次编写、多端运行的关键。其核心原理在于通过中间层抽象,将高级语言代码转换为平台无关的中间表示,再由各平台的运行时环境执行。.Net框架正是这一理念的杰出代表,其公共语言运行时(CLR)和中间语言(IL)机制构成了跨平台的技术基石。对于游戏开发而言,Unity引擎深度集成了.Net生态系统,通过Mono和IL2CPP两种脚本运行时后端,将C#代码高效部署到iOS、Android、PC等多元平台。理解.Net运行时与Unity的协作机制,不仅能优化游戏性能、解决平台兼容性问

cnracht8153的博客 287

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Unity中Mono所搭建的脚本核心基础

Mono基本介绍 Mono组件 C#编译器——MCS:MCS的作用就是将C#编译为CIL(通用中间语言) Mono运行时(mono Runtime):运行时中的编译器将CIL的Byte Code在转译为原生码,同时提供即时编译(JIT),提前编译(AOT),完全静态编译(Full-AOT)三种转译方式 基础类库:提供广泛的基础类 Mono类库:提供额外的有用功能,尤其是构建Linux方面 Mono如何提供脚本功能 总所周知Unity是由C++写成的,将Mono运行时嵌入到由C++写成的应用后,该应用便会获取

jkkk_的博客 7529

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

Unity中的Mono & Linux上编译Mono的流程

前段时间编译了一下Unity的Mono,看了很多相关的文章,也遇到很多新坑。所以来总结一下,加深自己对Mono的理解 为什么Unity可以跨平台运行呢 通常Unity的脚本有C#、JS、Boo。不过现在官方都只推荐使用C#了,为什么Unity可以支持用不同的语言编写代码呢?因为它使用了一种叫CIL的中间语言,C#、JS、Boo最终会被编译成一种叫IL的中间语言,然后通过Mono运行时编译...

693

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

上一篇: Unity 直接给物体赋角度值
下一篇: 2.4Unity三大语言,UnityScript/Boo/C#
参宿_七
博客等级 码龄10年 41粉丝 134原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值