【转】Unity3D将来时:IL2CPP(上)
Unity3D想必大家都不陌生,独立游戏制作者们很多人都在用它,甚至一些大公司也用在很商业的游戏制作上。Unity3D最大的一个特点是一次制作,多平台部署,而这一核心功能是靠Mono实现的。可以说Mono是Unity3D核心的核心,是Unity3D跨平台的根本。但是在2014年年中的时候,Unity3D官方博客上却发了一篇“The future of scripting in unity”的文章,引出了IL2CPP的概念,感觉有取代Mono之势。那什么是IL2CPP,它能为Unity3D和作为使用Unity3D的我们带来哪些好处和改变?这就是本文尝试说明的。
C#,.Net Framework
微软公司已经向ECMA申请将C#作为一种标准。在2001年12月,ECMA发布了ECMA-334 C#语言规范。C#在2003年成为一个ISO标准(ISO/IEC 23270)。这意味着只要你遵守CLI(Common Language Infrastructure),第三方可以将任何一种语言实现到.Net平台之上。Mono就是在这种环境下诞生的。
Mono是一个由Xamarin公司(先前是Novell,最早为Ximian)所主持的自由开放源代码项目。该项目的目标是创建一系列符合ECMA标准(Ecma-334和Ecma-335)的.NET工具,包括C#编译器和通用语言架构。与微软的.NET Framework(共通语言运行平台)不同,Mono项目不仅可以运行于Windows系统上,还可以运行于Linux,FreeBSD,Unix,OS X和Solaris,甚至一些游戏平台,例如:Playstation 3,Wii或XBox 360之上。Mono使得C#这门语言有了很好的跨平台能力。相对于微软的.Net Framework运行时库Mono使用自己的Mono VM作为运行时库。 加上C#本身快速友好的开发能力,最终使得Unity团队在创建之初就决定将Mono,C#作为其核心。(嗯,这是我猜的)
有人也许会说,Unity还支持JavaScript和Boo呢,不光光只有C#一门语言。首先我要纠正的是,在Unity中的JavaScript严格意义上说并不是W3C规范中的JavaScript,它正确的名字叫做Unity Script,其实是从Boo演变过来的(这样大家就能理解为啥在3门语言中,Boo用的人最少,但是却还一直存在的原因了吧)。我认为是Unity开始为了让更多的人能够快速的上手,特别是考虑到很多脚本程序员对JavaScript已经很熟悉了,为了照顾这部分人,发明了Unity Script,它的语法和W3C的JavaScript几乎一致,使得大家可以直接用其进行开发,降低门槛。但是Unity Script在运行上却和JavaScript有着本质的不同。这个我会在下一节IL中进行详细的描述。从三门语言在Unity中的使用情况而言:Boo几乎就没人用了,Unity Script和C#两者中无论是演示代码还是Unity Asset Store中的第三方代码,C#已经有85%-90%的比例(个人粗略估计,没有做详细统计)。可见C#在Unity中深受我等游戏码农的爱戴。
简单的来说,3大脚本被编译成IL,在游戏运行的时候,IL和项目里其他第三方兼容的DLL一起,放入Mono VM虚拟机,由虚拟机解析成机器码,并且执行
在得到中间语言IL后,使用IL2CPP将他们重新变回C++代码,然后再由各个平台的C++编译器直接编译成能执行的原生汇编代码。
http://zh.wikipedia.org/wiki/%E5%AE%89%E5%BE%B7%E6%96%AF%C2%B7%E6%B5%B7%E5%B0%94%E6%96%AF%E4%BC%AF%E6%A0%BC
http://zh.wikipedia.org/wiki/Mono
http://zh.wikipedia.org/wiki/.NET%E6%A1%86%E6%9E%B6
【转】Unity3D将来时:IL2CPP(上)相关推荐
- Unity3D将来时:IL2CPP(下)
Unity3D将来时:IL2CPP(下) 转载地址:http://www.game798.com/site/news_detail/id/1580 版本准备 前文详细的介绍了IL2CPP的来龙去脉,这 ...
- Unity3D 参数曲线 实现曲线上的匀速运动
环境:Unity2021.1.14 语言:C# 总起 本文源代码可以在https://github.com/anguangzhihen/TestOdinInspector中的TestCurve场景中找 ...
- U3d学习-使用Unity3D开发2D游戏(上)
1.创建一个项目 2.将Camera设置为正交投影 游戏的输出画面是通过摄像机所观察的场景来实现的,将场景呈现到2D的计算机屏幕上具有两种不同的投影方式:透视投影和正交投影,默认状态下是透视投影. 透 ...
- Unity3D开发之遇上Dropdown
unity应该是在5.0版本更新了新的UI组件,Dropdown.以前实现这个功能都需要自己来组装.现在集成化确实对开发者来说更快更方便.下面说下我在开发中遇到的跟Dropdown相关的问题. uni ...
- Unity将来时:IL2CPP是什么?
Unity3D 想必大家都不陌生,独立游戏制作者们很多人都在用它,甚至一些大公司也用在很商业的游戏制作上.Unity3D最大的一个特点是一次制作,多平台部署,而 这一核心功能是靠Mono实现的.可以说 ...
- 在Unity3D中使用泛型(上)
在Unity3D中使用泛型(上) 目录 在Unity3D中使用泛型上 目录 为什么需要泛型机制 泛型的一个例子 泛型的好处 Unity3D中常见的泛型 小结 为什么需要泛型机制 泛型机制的出现,最主要 ...
- [Unity3D]Unity3D游戏开发之当仙剑奇侠传遇上Mecanim动画系统
大家好,我是秦元培,欢迎大家关注我的博客,我的博客地址是 blog.csdn.net/qinyuanpei.博主总算赶在这个月底写出了这篇文章.这个月因为期末考试一直没时间研究太多关于技术方面的东西, ...
- IL2CPP是什么?
Unity3D 想必大家都不陌生,独立游戏制作者们很多人都在用它,甚至一些大公司也用在很商业的游戏制作上.Unity3D最大的一个特点是一次制作,多平台部署,而 这一核心功能是靠Mono实现的.可以说 ...
- Unity3D 内存管理
此行出处信息:http://www.onevcat.com/2012/11/memory-in-unity3d/ Unity3D在内存占用上一直被人诟病,特别是对于面向移动设备的游戏开发,动辄内存占用 ...
最新文章
- 关于子网划分—为什么全0全1子网号不能使用
- opencv学习笔记(六)直方图比较图片相似度
- SpringCloud与Seata分布式事务初体验
- mysql 事务日志备份_事务日志备份与恢复 5
- (85)FPGA显示激励(monitor)
- 【Flink】Flink StreamingFileSink
- 别找了,你要的中国民间神话故事在这里!
- IOS开发之MVC模式的介绍
- beanfactory的实现类_ApplicationContext和BeanFactory的区别
- vscode 网页版
- java 创建水果_简单的java水果商店后台
- python黑网站_python
- 发现《后端架构师技术图谱》
- 安卓系统实现播放器变速功能
- 性别符号php,树也分男女?给6万棵杨树画上性别符号,原来是因为…
- Spring源代码分析(11)---JDBC Dao(老树发新芽)
- vue3 效率的提升、composition-api 和 ref 详解
- mplfinance绘制K线图
- 软件开发项目经理职责
- 新买笔记本误删office2021解决方法
热门文章
- Vue中使用speak-tts插件实现点击按钮后进行语音播报(TTS/文字转语音)
- Sqlserver中使用ISNULL、CAST、CASE完成对jsTree数据的查询
- 【知识图谱】知识存储
- android音乐编辑器汉化版,WaveEditor手机版
- python开发环境配置_百度资讯搜索_python开发环境配置
- HTML-语义类标签
- Redux其实很简单(原理篇)
- centos 桥接配置 设置网络代理 lnmp搭建
- java中Class.getResource用法(用于配置文件的读取)
- mysql 导出select语句结果到excel文件等