从Unity3D编译器升级聊起Mono

简介:



接前篇Unity 5.3.5p8 C#编译器升级,本文侧重了解一些Mono的知识。

Unity3D的编译器升级

新升级的Mono C#编译器(对应Mono 4.4)

Unity编辑器及播放器所使用的Mono运行时还未升级。

新编译器仍针对C# 4,是旧的编译器也支持的版本。

新编译器目标框架为.Net 3.5,也是之前支持的框架。

Mono是如何运行的?

  1. *.cs源文件通过编译器编译成IL(中间文件)
  2. IL 运行在Mono的 JIT(just in time)
  3. Mono虚拟机运行在物理机中

查看Unity使用的Mono版本

参考:http://answers.unity3d.com/questions/259448/how-to-determine-mono-version-of-unity-.html

我在unity 5.3.4f1 中测试有效,而在unity 4.3.4f1下测试无效

using UnityEngine;
using System;
using System.Reflection;

public class MonoVersion : MonoBehaviour {
    void Start()
    {
        Type type = Type.GetType("Mono.Runtime");
        if (type != null)
        {
            MethodInfo info = type.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static);
            
            if (info != null)
                Debug.Log(info.Invoke(null, null));
        }
      //Debug.Log(System.Enviroment.Version);//net version?
    }
}

方法二

d:\Program Files\Unity_5_34\Editor\Data\Mono\bin>monop2 --runtime-version mono.exe
runtime version: 2.0.50727.1433
d:\Program Files\Unity_5_34\Editor\Data\Mono\bin>mono.exe --version
Mono JIT compiler version 2.0 (Visual Studio built mono)
Copyright (C) 2002-2010 Novell, Inc and Contributors. www.mono-project.com
        TLS:           normal
        GC:            Included Boehm (with typed GC)
        SIGSEGV:       normal
        Notification:  Thread + polling
        Architecture:  x86
        Disabled:      none

Mono

Mono是.Net Framework?

.NET和Mono两者是完全独立的,简单的理解:Mono项目是第三方的.Net Framework实现,比喻为.Net的跨平台版,绝大多数C#的特性在.net和mono中都是相同的,少部分特性两者的实现不一致。

Mono的目标是创建一系列符合ECMA 标准(Ecma-334Ecma-335)的.NET 工具,包括C# 编译器和共通语言执行平台

Mono 虚拟机包含一个实时编译引擎,该引擎可用于如下处理器:x86,SPARC,PowerPC,ARM,S390(32位模式和64位模式),x86-64,IA64 和64位模式的 SPARC。该虚拟机可以将代码实时编译或者预先编译到原生代码。对于那些没有列出来的系统,则使用的是代码解释器。


这部分内容摘自:http://www.mono-project.com/docs/about-mono/

mono - C# Compiler

Mono’s C# compiler is feature complete for C# 1.0, 2.0, 3.0, 4.0 and 5.0 (ECMA). A good description of the feature of the various versions is available on Wikipedia.

mono的c#编译器提供c# 1.0,2.0,3.0,4.0和5.0(ECMA)完整的功能。不同版本的特性的描述可以在维基百科上查看。

mono - Mono Runtime

The runtime implements the ECMA Common Language Infrastructure (CLI). The runtime provides a Just-in-Time (JIT) compiler, an Ahead-of-Time compiler (AOT), a library loader, the garbage collector, a threading system and interoperability functionality.

mono运行时实现了ECMA 公共语言基础(CLI)。运行时提供了即时(JIT)编译器,提前的编译器(AOT),库加载器,垃圾回收机器,线程操作,互操作性

mono - .NET Frame Class Libray

The Mono platform provides a comprehensive set of classes that provide a solid foundation to build applications on. These classes are compatible with Microsoft’s .Net Framework classes.

Mono平台提供了一组全面的类来构建应用程序提供一个坚实的基础。这些类是兼容微软的.Net framework

mono - Mono Class Libray

Mono also provides many classes that go above and beyond the Base Class Library provided by Microsoft. These provide additional functionality that are useful, especially in building Linux applications. Some examples are classes for Gtk+, Zip files, LDAP, OpenGL, Cairo, POSIX, etc.

Mono还提供了很多类,甚至超越了微软提供的基类库。这些提供额外的功能是有用的,特别是在构建Linux应用程序。一些例子是Gtk +,Zip文件、LDAP、OpenGL,Cairo,POSIX等等。

.Net和Mono

.Net和C#版本

.Net版本和C#版本:http://www.cnblogs.com/zhaoqingqing/p/5478239.html

.net framework c# version note date
.net 3.5 3.0 vs2008 2007-08
.net 4.0 4.0 vs2010 2010-04
.net 4.5 5.0 vs2012/13 2012-10
.net 4.6 6.0 vs2015 2015-07

.Net和Mono版本关系

一个大致的版本对应关系

date mono version net version note
2008-10-01 mono 2.0 .net 2.0 c# 3.0
2011-12-19 mono 2.10.8 .net 4.0 c# 4.0
2014-03-31 mono 3.4 .net 4.5 c#5.0
2016-06-08 mono 4.4.0 .net 4.6.1 c#6.0

mono编译器版本升级 mono运行库没有升级,目前运行时的mono还是 3.5

Mono发行版本

Date(时间) Version(版本) Note(备注)
2004-06-30 1.0 C# 1.0 support
2006-11-09 1.2 C# 2.0 support
2008-10-06 2.0 .Net 2.0 C# 3.0
2010-09-22 2.8 .Net profile C#4.0 support
2012-10-15 3.0 C# 5.0 support,async base class libray,MVC4 partial
2014-03-31 3.4
2015-04-29 4.0 .NET 4.5 profile .NET4.5 assembiles,C#6.0,integrate .net core code
2014-03-31 4.2
2016-06-08 4.4
2016-08-01 4.6

2016 Mono joins the .NET Foundation

参考资料

Mono release: http://www.mono-project.com/docs/about-mono/releases/
Mono 4.4:http://www.mono-project.com/docs/about-mono/releases/4.4.0/
Mono software: https://en.wikipedia.org/wiki/Mono_(software)

Unity3D发行版本

Unity Version Mono Runtime/Compiler Version Note
3.5
4.0 引擎大版本升级
4.3 新的2D工具,Sprite
4.6 uGUI,IL2CPP
5.0 2.0/2.0 shader,assetbundle重大改变 ,等等
5.3.5p8 2.0/4.4 Mono编译器升级运行时未升级,等等
5.4.0 f1 2.0/2.0 更多VR平台支持,等等

扩展资料

http://blogs.unity3d.com/2016/04/01/unity-joins-the-net-foundation/

更多信息

我的疑问

编译器和运行时版本不匹配可以正常执行?

文献资料

mono project github: https://github.com/mono/mono

mono doc: http://www.mono-project.com/docs/

Mono英文百科:[https://en.wikipedia.org/wiki/Mono](https://en.wikipedia.org/wiki/Mono)

Mono中文百科:https://zh.wikipedia.org/wiki/Mono

扩展资料

[.NET Core与.NET Framework、Mono之间的关系](http://www.cnblogs.com/shanyou/p/4295163.html)

魅力 .NET:从 Mono、.NET Core 说起

[c#基础系列二]:从编译,执行过程理解c#

Mono为何能跨平台?聊聊CIL(MSIL)

国内 Mono 相关文章汇总:http://www.cnblogs.com/shanyou/archive/2012/07/28/2612919.htm



本文转自赵青青博客园博客,原文链接:https://yq.aliyun.com/articles/new?spm=5176.100239.blogoption.1.673d7626sOWXVQ&draft-forbid=1,如需转载请自行联系原作者
相关文章
|
Java API C#
Unity 引擎开始从 Mono 迁移到 .NET CoreCLR
Unity 引擎开始从 Mono 迁移到 .NET CoreCLR
560 0
Unity 引擎开始从 Mono 迁移到 .NET CoreCLR
|
图形学 自然语言处理
|
Web App开发 算法 Linux
|
2月前
|
图形学 C#
超实用!深度解析Unity引擎,手把手教你从零开始构建精美的2D平面冒险游戏,涵盖资源导入、角色控制与动画、碰撞检测等核心技巧,打造沉浸式游戏体验完全指南
【8月更文挑战第31天】本文是 Unity 2D 游戏开发的全面指南,手把手教你从零开始构建精美的平面冒险游戏。首先,通过 Unity Hub 创建 2D 项目并导入游戏资源。接着,编写 `PlayerController` 脚本来实现角色移动,并添加动画以增强视觉效果。最后,通过 Collider 2D 组件实现碰撞检测等游戏机制。每一步均展示 Unity 在 2D 游戏开发中的强大功能。
82 6
|
1月前
|
测试技术 C# 图形学
掌握Unity调试与测试的终极指南:从内置调试工具到自动化测试框架,全方位保障游戏品质不踩坑,打造流畅游戏体验的必备技能大揭秘!
【9月更文挑战第1天】在开发游戏时,Unity 引擎让创意变为现实。但软件开发中难免遇到 Bug,若不解决,将严重影响用户体验。调试与测试成为确保游戏质量的最后一道防线。本文介绍如何利用 Unity 的调试工具高效排查问题,并通过 Profiler 分析性能瓶颈。此外,Unity Test Framework 支持自动化测试,提高开发效率。结合单元测试与集成测试,确保游戏逻辑正确无误。对于在线游戏,还需进行压力测试以验证服务器稳定性。总之,调试与测试贯穿游戏开发全流程,确保最终作品既好玩又稳定。
47 4
|
2月前
|
图形学 缓存 算法
掌握这五大绝招,让您的Unity游戏瞬间加载完毕,从此告别漫长等待,大幅提升玩家首次体验的满意度与留存率!
【8月更文挑战第31天】游戏的加载时间是影响玩家初次体验的关键因素,特别是在移动设备上。本文介绍了几种常见的Unity游戏加载优化方法,包括资源的预加载与异步加载、使用AssetBundles管理动态资源、纹理和模型优化、合理利用缓存系统以及脚本优化。通过具体示例代码展示了如何实现异步加载场景,并提出了针对不同资源的优化策略。综合运用这些技术可以显著缩短加载时间,提升玩家满意度。
47 5
|
1月前
|
前端开发 图形学 开发者
【独家揭秘】那些让你的游戏瞬间鲜活起来的Unity UI动画技巧:从零开始打造动态按钮,提升玩家交互体验的绝招大公开!
【9月更文挑战第1天】在游戏开发领域,Unity 是最受欢迎的游戏引擎之一,其强大的跨平台发布能力和丰富的功能集让开发者能够迅速打造出高质量的游戏。优秀的 UI 设计对于游戏至关重要,尤其是在手游市场,出色的 UI 能给玩家留下深刻的第一印象。Unity 的 UGUI 系统提供了一整套解决方案,包括 Canvas、Image 和 Button 等组件,支持添加各种动画效果。
72 3
|
1月前
|
设计模式 存储 人工智能
深度解析Unity游戏开发:从零构建可扩展与可维护的游戏架构,让你的游戏项目在模块化设计、脚本对象运用及状态模式处理中焕发新生,实现高效迭代与团队协作的完美平衡之路
【9月更文挑战第1天】游戏开发中的架构设计是项目成功的关键。良好的架构能提升开发效率并确保项目的长期可维护性和可扩展性。在使用Unity引擎时,合理的架构尤为重要。本文探讨了如何在Unity中实现可扩展且易维护的游戏架构,包括模块化设计、使用脚本对象管理数据、应用设计模式(如状态模式)及采用MVC/MVVM架构模式。通过这些方法,可以显著提高开发效率和游戏质量。例如,模块化设计将游戏拆分为独立模块。
72 3
|
2月前
|
图形学 开发者 存储
超越基础教程:深度拆解Unity地形编辑器的每一个隐藏角落,让你的游戏世界既浩瀚无垠又细节满满——从新手到高手的全面技巧升级秘籍
【8月更文挑战第31天】Unity地形编辑器是游戏开发中的重要工具,可快速创建复杂多变的游戏环境。本文通过比较不同地形编辑技术,详细介绍如何利用其功能构建广阔且精细的游戏世界,并提供具体示例代码,展示从基础地形绘制到植被与纹理添加的全过程。通过学习这些技巧,开发者能显著提升游戏画面质量和玩家体验。
67 3