Unity跨平台的机制原理-阿里云开发者社区

开发者社区> 二哈卖豆腐> 正文

Unity跨平台的机制原理

简介: 首先需要了解的是,Unity3D的C#基础脚本模块是通过Mono来实现的。 什么是Mono? 参考下百度百科:Mono是一个由Novell公司(由Xamarin发起)主持的项目,并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程。
+关注继续查看

首先需要了解的是,Unity3D的C#基础脚本模块是通过Mono来实现的。

什么是Mono?

参考下百度百科:Mono是一个由Novell公司(由Xamarin发起)主持的项目,并由Miguel de lcaza领导的,一个致力于开创.NET在Linux上使用的开源工程。它包含了一个C#语言的编译器,一个CLR的Runtime,和一组类库,并实现了 ADO NET和ASP NET。

它基于CIL和C#的ECMA标准,提供了了微软.Net FrameWork的另一种实现。

Mono主要有以下部分组成:

C#编译器——mcs。(最新的Mono版本已经可以支持C#5.0,但Unity3D的Mono版本仍然停留在2.0+阶段(支持c#3.0),所以C#的一些新功能无法在unity中使用)

运行时:即时编译器JIT(后文会介绍)。以及GC,类库加载器等等。

基础类库(BCL)。

Mono类库。提供了超出微软.NET的一些类,提供了许多额外功能,主要是用于构建其他操作系统上的应用。

下面进入正题:

Mono和Unity

Unity引擎本身是由C++写出的,只不过Mono被嵌入到了Unity当中,为unity提供了一个完整的虚拟机运行环境。这样Mono的嵌入接口会将Mono Runtime暴露给Unity底层的C++代码。通过这些接口,开发者就可以控制Mono Runtime,以及依托于Mono Runtime的托管代码。

Unity为何能够跨平台?

一句话概括,主要原因在于Unity通过Mono使用了一种叫CIL(Common Intermediate Language,也叫MSIL)通用中间语言的基于堆栈的代码指令集,它属于CLR的一个子集。

Unity3D的开发过程中,代码的编译主要分为两个过程:

1)首先将对应的脚本代码编译成CIL(之后CIL还会被编译成一种位元码,生成一个CLI集合)。

2)然后Mono在运行时将CLI集合中的位元码编译为本地运行的原生指令。(这里会使用到上文中的JIT、AOT编译模式)

注:也就是说在Mono中运行的其实是CIL,而在本地运行的是被编译后生成的原生指令。

更多unity2018的功能介绍请到paws3d学习中心查找。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
阿里云服务器怎么设置密码?怎么停机?怎么重启服务器?
如果在创建实例时没有设置密码,或者密码丢失,您可以在控制台上重新设置实例的登录密码。本文仅描述如何在 ECS 管理控制台上修改实例登录密码。
9481 0
ServiceStack.Hello——跨平台.net REST api服务搭建
ServiceStack.Hello——跨平台.net REST api服务搭建   自己创建: https://github.com/ServiceStack/ServiceStack/wiki/Create-your-first-webservice   直接下载源码: https://github.
1073 0
阿里云服务器端口号设置
阿里云服务器初级使用者可能面临的问题之一. 使用tomcat或者其他服务器软件设置端口号后,比如 一些不是默认的, mysql的 3306, mssql的1433,有时候打不开网页, 原因是没有在ecs安全组去设置这个端口号. 解决: 点击ecs下网络和安全下的安全组 在弹出的安全组中,如果没有就新建安全组,然后点击配置规则 最后如上图点击添加...或快速创建.   have fun!  将编程看作是一门艺术,而不单单是个技术。
10841 0
跨平台Unicode与UTF8互转代码
参考来源:http://blog.csdn.net/flying8127/article/details/1598521 在原来原基础上,将代码整理,并加强安全性. 并按照WindowsAPI设计, 添加输出缓冲长度探测功能 当OutUTFString为NULL时, 可以进行输出的UTF8字符串...
802 0
《PhoneGap精粹:构建跨平台的移动App》——导读
本节书摘来自异步社区《PhoneGap精粹:构建跨平台的移动App》一书中的目录,作者 【美】John M. Wargo,更多章节内容可以访问云栖社区“异步社区”公众号查看
1095 0
阿里云服务器如何登录?阿里云服务器的三种登录方法
购买阿里云ECS云服务器后如何登录?场景不同,阿里云优惠总结大概有三种登录方式: 登录到ECS云服务器控制台 在ECS云服务器控制台用户可以更改密码、更换系.
13163 0
初识 Knative: 跨平台的 Serverless 编排框架
## Knative 是什么 Knative 是 Google 在 2018 的 Google Cloud Next 大会上发布的一款基于 Kubernetes 的 Serverless 框架。Knative 一个很重要的目标就是制定云原生、跨平台的 Serverless 编排标准。
11125 0
数据库中跨平台迁移方法介绍
  一、迁移方法介绍:   exp/imp:   这也算是最常用最简单的方法了,一般是基于应用的owner级做导出导入。   操作方法为:在新库建立好owner和表空间,停老库的应用,在老库做exp user/pwd owner=XXX file=exp_xxx.
801 0
112
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载