热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Unity3D跨平台、C#、Mono、IL2Cpp.md

一、c#是什么?c#是一种语言,是微软推出的一种基于.NET框架的面向对象的高级编程语言。Windows系列的平台,后面微软标准.net标准开放出来,只需要开发出来符合.net字节

一、c#是什么?

c#是一种语言,是微软推出的一种基于.NET框架的面向对象的高级编程语言。Windows系列的平台,后面微软标准.net标准开放出来,只需要开发出来符合.net字节码的标准代码,就可以让我们的代码在.net上运行起来。

IL:Intermediate Language 中间语言,又叫托管代码(由CLR管理它的执行)

CIL:Common Intermediate Language,特指在.Net平台下的IL标准。完成基于堆栈的,运行在.net虚拟机上。

JIT:just-in-time 即时编译,将IL编译成本地CPU指令(本地代码),一个程序在它运行的时候创建并且运行了全新的代码,而并非那些最初作为这个程序的一部分保存在硬盘上的固有的代码, 就叫Jit

AOT:Ahead-of-Time,提前编译或静态编译,指的是将高级语言直接转成传统的编译型编程语言(如c/c++)。


二、Mono是什么?

Mono是Xamarin公司的一个开源项目,该项目是创建一系列符合ECMA标准的.NET工具,包括C#编译器,Mono项目可以运行在多平台(Linux,windows,Android等平台),相对于微软的.NET运行库Mono使用自己的Mono VM作为运行库。

Mono提供两种编译方式:JIT(Just-in-Time compilation,即时编译)和AOT(Ahead-of-Time,提前编译或静态编译)

C#或者VB这样遵循CLI规范的高级语言,被先被各自的编译器编译成中间语言:IL(CIL),等到需要真正执行的时候,这些IL会被加载到运行时库,也就是VM中,由VM动态的编译成汇编代码(JIT)然后在执行。


Mono缺点:



  • Mono VM在各个平台移植,在webgl很麻烦和有Bug。

  • Mono版本授权受限

  • 因为是VM(虚拟机)运行时编译后再运行,所以效率稍微受影响。


三、IL2Cpp是什么?

IL2CPP是Unity开发的跨平台CLR解决方案,把IL中间语言转换成静态CPP文件,然后由本地编译器编译成二进制机器指令。由两部分组成:AOT静态编译编译器(il2cpp.exe)和运行时库(libil2cpp)。由于C#这样高级语言有GC、线程创建等机制,运行时库(libil2cpp)是来支持这些机制。

IL2CPP和mono的最大区别就是不能在运行时动态生成代码和类型,所以这就要求必须在编译时就完全确定需要用到的类型。


类型裁剪

IL2CPP在打包时会自动对Unity工程的DLL进行裁剪,将代码中没有引用到的类型裁剪掉,以达到减小发布后ipa包的尺寸的目的。然而在实际使用过程中,很多类型有可能会被意外剪裁掉,造成运行时抛出找不到某个类型的异常。特别是通过反射等方式在编译时无法得知的函数调用,在运行时都很有可能遇到问题。

Unity提供了一个方式来告诉Unity引擎,哪些类型是不能够被剪裁掉的。具体做法就是在Unity工程的Assets目录中建立一个叫link.xml的XML文件,然后按照下面的格式指定你需要保留的类型:









IL2CPP的优点

速度更快

可以使用c++编译优化,可以缩小程序体积

可以兼容更多平台


IL2CPP的缺点

因为使用AOT,编译时耗时更多

代码里不能用基于反射的特性


四、Unity3D跨平台和IL2Cpp

Unity3D的跨平台一开始是基于Mono的跨平台来实现。

后面是使用IL2CPP来实现跨平台。



  • .net工具:将Unity开发的C#代码编译成IL字节码,采用标准的微软的.net开发。

  • IL2Cpp项目:将IL字节码编译成静态的编译型语言(c,c++)的代码,IL–>c++代码,使用AOT技术。

  • 使用各平台的编译工具(Ios xcode,Android NDK,windows vs c++)来编译c++代码,把代码编译成本地的机器指令,直接在os上执行,效率比.net的解释执行效率更高

  • IL2CPP VM:属于运行时代码,负责提供诸如GC管理,线程创建这类的服务性工作,由于去除了IL加载和动态解析的工作,所以IL2CPP VM可以做得很小,使载入时间缩短。

  • 运行的时候:unity = IL2CPP 技术编译出来的二进制指令 + IL2CPP runtime环境(GC,Thread等)


转载请声明出处:https://www.cnblogs.com/wwhhgg/



推荐阅读
  • 本文整理了一份基础的嵌入式Linux工程师笔试题,涵盖填空题、编程题和简答题,旨在帮助考生更好地准备考试。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • Android 构建基础流程详解
    Android 构建基础流程详解 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • 使用HTML和JavaScript实现视频截图功能
    本文介绍了如何利用HTML和JavaScript实现从远程MP4、本地摄像头及本地上传的MP4文件中截取视频帧,并展示了具体的实现步骤和示例代码。 ... [详细]
  • 如何配置VisualSVN以确保提交时必须填写日志信息
    在软件开发团队中,成员们有时会忘记在提交代码时添加必要的备注信息。为了规范这一流程,可以通过配置VisualSVN来强制要求团队成员在提交文件时填写日志信息。本文将详细介绍如何设置这一功能。 ... [详细]
  • iOS 不定参数 详解 ... [详细]
  • 介绍如何使用 `document.createElementNS` 方法创建带有特定命名空间 URI 和限定名称的元素。 ... [详细]
  • 深入解析HTML5字符集属性:charset与defaultCharset
    本文将详细介绍HTML5中新增的字符集属性charset和defaultCharset,帮助开发者更好地理解和应用这些属性,以确保网页在不同环境下的正确显示。 ... [详细]
  • Flutter 开发中集成极光推送的详细步骤
    本文详细介绍了如何在 Flutter 项目中集成极光推送服务,包括配置和测试的具体步骤。 ... [详细]
  • 本文对SQL Server系统进行了基本概述,并深入解析了其核心功能。SQL Server不仅提供了强大的数据存储和管理能力,还支持复杂的查询操作和事务处理。通过MyEclipse、SQL Server和Tomcat的集成开发环境,可以高效地构建银行转账系统。在实现过程中,需要确保表单参数与后台代码中的属性值一致,同时在Servlet中处理用户登录验证,以确保系统的安全性和可靠性。 ... [详细]
  • 系统转换的三种方法及其具体应用分析
    系统转换是信息技术领域中常见的任务,本文详细探讨了三种主要的系统转换方法及其具体应用场景。这些方法包括:代码迁移、数据迁移和平台迁移。文章通过实例分析了每种方法的优势和局限性,并提供了实际操作中的注意事项和技术要点。例如,代码迁移适用于从VB6获取网页源码,数据迁移在Ubuntu中用于隐藏侧边栏,而平台迁移则涉及Tomcat 6.0的使用和谷歌爬虫的测试。此外,文章还讨论了蓝翰互动PHP面试和5118 SEO工具在系统转换中的应用,为读者提供了全面的技术参考。 ... [详细]
  • 帝国CMS中的信息归档功能详解及其重要性
    本文详细解析了帝国CMS中的信息归档功能,并探讨了其在内容管理中的重要性。通过归档功能,用户可以有效地管理和组织大量内容,提高网站的运行效率和用户体验。此外,文章还介绍了如何利用该功能进行数据备份和恢复,确保网站数据的安全性和完整性。 ... [详细]
  • 在使用 SQL Server 时,连接故障是用户最常见的问题之一。通常,连接 SQL Server 的方法有两种:一种是通过 SQL Server 自带的客户端工具,例如 SQL Server Management Studio;另一种是通过第三方应用程序或开发工具进行连接。本文将详细分析导致连接故障的常见原因,并提供相应的解决策略,帮助用户有效排除连接问题。 ... [详细]
  • 本文提供了针对iOS设备在Xcode 8.0及以上版本中的调试指南,详细介绍了从环境配置到常见问题解决的全流程。内容涵盖设备连接、证书配置、日志查看及性能监控等多个方面,适用于2015年后的开发环境。通过本指南,开发者可以高效地进行应用调试,提升开发效率。 ... [详细]
author-avatar
Irises---_372
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有