位置: 编程技术 - 正文

[置顶] (七)Unity5.0新特性------介绍IL2CPP内部构建(置顶pyq会被自己屏蔽的人看到吗)

编辑:rootadmin


推荐整理分享[置顶] (七)Unity5.0新特性------介绍IL2CPP内部构建(置顶pyq会被自己屏蔽的人看到吗),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:置顶朋友圈,置顶的朋友圈是所有人可见吗,置顶语录怎么设置,置顶朋友圈,置顶语录怎么设置,置顶通知要开启吗,置顶的朋友圈是所有人可见吗,置顶通知要开启吗,内容如对您有帮助,希望把文章链接给更多的朋友!

孙广东 .5.

介绍IL2CPP内部构建

将近一年以前的事了,Unity开始谈论未来在Unity中的脚本。新的 IL2CPP 脚本后端答应(highly-portable)给Unity带来了高性能、 高便携式虚拟机。今年 1 月,Unity使用 IL2CPP,尝试的第一平台是iOS -bit。Unity5 发布带来了另一种平台:WebGL。由于从我们拥有的强大的社区,用户的输入,我们已经为 IL2CPP发运许多版本更新修补程序,稳步提高其编译和运行时。

我们没有计划去制止提高 IL2CPP,但我们认为它可能是一个好的主意,后退一步来讲,并告诉你一点关于 IL2CPP 从内到外的工作。在接下来的几个月,UNity打算写关于以下主题 (和也许还有其他人) 在这个 IL2CPP Internals 系列的帖子:1.The basics – toolchain and command line arguments (this post)2.A tour of generated code3.Debugging tips for generated code4.Method calls (normal methods, virtual methods, etc.)5.Generic sharing implementation6.P/invoke wrappers for types and methods7.Garbage collection integration8.Testing frameworks and usage

为了使这一系列的文章变成可能,我们要讨论一些有关 IL2CPP的实现细节 ,肯定会在将来改变。希望我们还可以提供一些有用的、 有趣的信息。

IL2CPP 是什么?IL2CPP 的技术有两个截然不同的部分。· An ahead-of-time (AOT) compiler· A runtime library to support the virtual machine

AOT 编译器将为中间语言 (IL),对 c++ 源代码从.NET 编译器输出低电平。运行时库提供服务和抽象机制,比如垃圾收集器GC,对线程和文件和内部调用 (本机代码直接修改托管的数据结构) 的实现独立于平台的访问。

AOT 编译器:IL2CPP AOT 编译器被命名为 il2cpp.exe。在 Windows 上,你可以找到它在 EditorDatail2cpp 目录中。在 OSX 上正是在Unity安装的Contents/Frameworks/il2cpp/build目录。Il2cpp.exe 实用程序是托管可执行文件,完全用 C# 写成。在Unity的 IL2CPP 的发展过程中使用.NET 和Mono编译器编译它。

Il2cpp.exe 实用程序接受托管程序集被Mono编译,附带Unity并生成 c + + 代码,我们将传递给特定于平台的 c ++ 的编译器编译的。

你可以想想这样的 IL2CPP 工具链:

运行时库:IL2CPP 技术的另一部分是一个运行时库来支持虚拟机。我们已几乎完全使用 c++ 代码 (它有一点点的平台特定的程序集的代码,但让我们记住这两个我们之间) 此库。我们调用运行时库 libil2cpp,和它运作为静态库链接到可执行文件的player。IL2CPP 技术的主要优点之一就是这简单的和便携式的运行时库。

你可以找到一些关于 libil2cpp 代码如何组织的,看 libil2cpp 的头文件的线索(你会发现他们在 Windows 上的 EditorDataPlaybackEngineswebglsupportBuildToolsLibrarieslibil2cppinclude 目录或上 OSX 的Contents/Frameworks/il2cpp/libil2cpp 目录中)。例如,由 il2cpp.exe 和 libil2cpp 运行时生成的 c++ 代码之间的接口位于代码codegen/il2cpp-codegen.h 头文件。

运行时的一个关键部分是垃圾回收器GC。我们这里工作在Unity5 与 libgc,Boehm-Demers-Weiser垃圾回收器。然而,libil2cpp 旨在允许我们使用其他的垃圾收集器。例如,我们正在研究整合微软 GC 是开源作为 CoreCLR 的一部分。我们会有更多要说,在我们关于垃圾回收器集成在本系列的文章稍后介绍。

Il2cpp.exe 是如何执行的?Let’s take a look at an example. I’ll be using Unity 5.0.1 on Windows, and I’ll start with a new, empty project. So that we have at least one user script to convert, I’ll add this simple MonoBehaviour component to the Main Camera game object:让我们看看一个例子。我会在 Windows 上,使用 Unity 5.0.1,将从一个新的空项目中入手。所以,我们有至少一个用户脚本,我将添加到Main Camera游戏物体,就是如下的这个简单的 MonoBehaviour 组件:using UnityEngine;public class HelloWorld : MonoBehaviour { void Start () { Debug.Log("Hello, IL2CPP!"); }}

[置顶]
        (七)Unity5.0新特性------介绍IL2CPP内部构建(置顶pyq会被自己屏蔽的人看到吗)

当我build WebGL 平台时,我可以使用进程资源管理器中看到Unity用于运行 il2cpp.exe 的命令行:

"C:Program FilesUnityEditorDataMonoBleedingEdgebinmono.exe" "C:Program FilesUnityEditorDatail2cpp/il2cpp.exe" --copy-level=None --enable-generic-sharing --enable-unity-event-support --output-format=Compact --extra-types.file="C:Program FilesUnityEditorDatail2cppil2cpp_default_extra_types.txt" "C:UsersJosh PetersonDocumentsIL2CPP Blog ExampleTempStagingAreaDataManagedAssembly-CSharp.dll" "C:UsersJosh PetersonDocumentsIL2CPP Blog ExampleTempStagingAreaDataManagedUnityEngine.UI.dll" "C:UsersJosh PetersonDocumentsIL2CPP Blog ExampleTempStagingAreaDatail2cppOutput"

该命令行是相当长而可怕,所以让我们打开它。首先,Unity运行此可执行文件:"C:Program FilesUnityEditorDataMonoBleedingEdgebinmono.exe"

然后在命令行上的下一个参数是 il2cpp.exe 实用程序本身。"C:Program FilesUnityEditorDatail2cpp/il2cpp.exe"

其余的命令行参数传递给 il2cpp.exe,不是 mono.exe。让我们看看他们。首先,Unity将传递给 il2cpp.exe 的五个标记:· –copy-level=None · 指定该 il2cpp.exe 不应执行生成的 c + + 代码的特殊文件副本。· –enable-generic-sharing · 这是一个代码和二进制大小缩减功能。IL2CPP 将分享泛型方法的执行时,它可以。· –enable-unity-event-support · 特别的支持,以确保Unity事件,均可以通过反射访问,该代码正确生成。· –output-format=Compact · 需要较少的字符的类型和方法名称的格式生成 c + + 代码。这段代码很难调试,因为 IL 代码中的名称不保留的但是它经常编译速度更快,因为 c + + 编译器可以解析的代码更少。· –extra-types.file=”C:Program FilesUnityEditorDatail2cppil2cpp_default_extra_types.txt” · 使用默认值 (和空) 额外类型文件。Il2cpp.exe 知道哪个泛型或数组类型将创建在运行时,但不是存在于 IL 代码,可以将此文件添加在一个Unity的项目。

它是重要的是要注意这些命令行参数可以将在以后的版本中更改。我们不是一个点还在那里,我们有一套稳定和支持的 il2cpp.exe 的命令行参数。

最后,我们有两个文件和一个目录的列表,在命令行上:· “C:UsersJosh PetersonDocumentsIL2CPP Blog ExampleTempStagingAreaDataManagedAssembly-CSharp.dll”· “C:UsersJosh PetersonDocumentsIL2CPP Blog ExampleTempStagingAreaDataManagedUnityEngine.UI.dll”· “C:UsersJosh PetersonDocumentsIL2CPP Blog ExampleTempStagingAreaDatail2cppOutput”

Il2cpp.exe 实用程序接受所有它应该转换的 IL 程序集的列表。在这种情况下,他们是我简单的MonoBehaviour, Assembly-CSharp.dll, and the GUI assembly, UnityEngine.UI.dll。请注意有几个显眼的assembles在这里缺少。很显然,我的脚本引用 UnityEngine.dll,并引用至少 mscorlib.dll 中和可能的其他程序集。他们在哪里?实际上,il2cpp.exe 内部解析这些程序集。他们可以在命令行上被提及,但它们并非必要。Unity只需要明确提及的根程序集 (其中那些未引用的任何其他程序集)。

Il2cpp.exe 命令行上的最后一个参数是在其中创建输出 c + + 文件的目录。如果你是好奇,看看该目录中生成的文件,他们将在本系列的下一篇文章的主题中介绍。你之前就知道虽然你可能想要选择的 WebGL 的“Development Player”选项生成设置。这将删除 –output-format=Compact 的命令行参数,并且给你更好的类型和方法名称生成的 c + + 代码中。

请尝试更改 WebGL 或 iOS Player Settings中的各种选项。你应该能够看到不同的命令行选项传递给 il2cpp.exe,使不同的代码生成步骤。例如,更改 WebGL Player Settings中的“Enable Exceptions”设置为“Full”值,添加–emit-null-checks, –enable-stacktrace, and –enable-array-bounds-check到 il2cpp.exe 命令行参数。

IL2CPP 不做什么?我想指出,我们不尝试重写 C# 标准库与 IL2CPP。当你建立一个Unity的项目,使用 IL2CPP 脚本后端时,C# 标准库中的所有代码 mscorlib.dll 中 System.dll,等是完全相同的代码用于Mono的脚本后端。

我们依赖已经是知名的用户和久经时间考验Unity项目中的 C# 标准库代码。所以当我们调查有关 IL2CPP 的 bug,我们可以是相当自信的 bug 是在 AOT 编译器或运行时库,和其它地方。

我们如何开发、 测试和运送 IL2CPP在一月份首次公开发行的 IL2CPP 版本 4.6.1p5 以来,我们已经发运 6 个完整的版本和 7 补丁程序版本 (跨版本 4.6 和 5.0 的统一)。我们已经纠正了在发行说明中提到的超过 个 bug。

为了让持续改进发生,我们内部,针对只有一个版本的 IL2CPP 代码开发中统一用于ship alpha 和 beta 版本的树干分支。只是之前每个版本,我们端口 IL2CPP 更改为特定的发布分支,运行我们的测试,并验证所有我们固定的 bug 在该版本中更正。我们的质量保证和持续的工程团队做了令人难以置信的工作使交货以这种速度成为可能。这意味着我们的用户永远不会超过大约一个星期从最新修补程序 IL2CPP 的 bug。

我们用户社区已被证明非常宝贵,提交了许多高质量 bug 报告。我们从我们的用户,以帮助不断改进 IL2CPP,感谢所有的反馈,我们期待着更多。

More to come:下一次,我们将深入由 il2cpp.exe,看看您的项目实际上什么样子 c + + 编译器生成的代码。

文章的源地址:

Unity摄像机的使用三:游戏的截图 我们继续摄像机的运用,这节我们说下游戏的截图:照例,我们先搭好场景,在场景中创建几个物体,随意的。。。下面我们就开始写代码:usingUnityEngi

Unity UGUI 父对象的透明度能直接影响到子对象的显示 没错,跟NGUI的UIWidget有类功能的组件是CanvasGroup!!!!!

unity 地图选关功能设计 在手机游戏中经常有选择关卡界面是一大张地图,上面各个关卡,可以拖动地图,可以点击关卡。这里就涉及到一个问题,如果在关卡上既实现可被拖

标签: 置顶pyq会被自己屏蔽的人看到吗

本文链接地址:https://www.jiuchutong.com/biancheng/375723.html 转载请保留说明!

上一篇:Unity摄像机的使用二:摄像机的切换(unity摄像机怎么调出来)

下一篇:Unity摄像机的使用三:游戏的截图(unity摄像机范围)

  • 个人所得税可以不交税吗
  • 一般纳税人委托其他单位加工材料收回后直接对外销售的
  • 偷税与漏税的界限是
  • 对公账户的钱都是国有资产吗
  • 劳务费计入职工薪酬吗
  • 销售收入与营业费用的配比
  • 个别计价法和先进先出法举例
  • 个体户个税计算方法2022税率表
  • 应收账款贷方有余额是什么意思
  • 外汇结汇成人民币违法吗
  • 房产税直接减免政策
  • 差额征税进项如何抵扣
  • 发票专用章在哪里盖章
  • 企业拆迁补偿款会计分录
  • 旅行社代订机票可以入差旅费报销吗
  • 科技研发政策
  • 资本公积可以怎么处理掉
  • 微众银行账户验证账户0019向您尾号677账户
  • 应收账款的产生之一是由于销售
  • 总分机构怎么纳税
  • 银行借款利息支出可以税前扣除吗
  • 公司有好多没有股份的人
  • windows10软件图标不正常显示
  • 技术合同的计税依据包括研究开发经费
  • 美团代收是什么意思
  • 怎么更改mac
  • 出口退税的条件包括
  • phpemail正则
  • 社保会计科目怎么做账
  • 新公司免税额度是多少
  • 什么是产品?产品的举例子
  • 发生错误的原始凭证包括
  • 费用分摊的分录
  • 保险公司应收账款管理现状及存在的问题
  • 会计月报表怎么做表格
  • php正则匹配时间
  • chat gpt 国内版免费手机
  • 命令行mkdir创建文件夹
  • 支付网络服务费属于现金流量表的哪一项
  • 企业所得税不得核定征收行业
  • 公司注册资金表格模板
  • 农民工工资专用账户
  • 表单上传文件
  • MongoDB db.serverStatus()输出内容中文注释
  • python列表的创建和操作
  • 冲红的发票怎么做账会计分录
  • 给离职员工买社保的风险
  • 产权出典是啥意思
  • 软件属于哪种无形资产
  • 未分配利润可以弥补亏损吗
  • 单位租的个人房怎么入账
  • 普通发票可以扣除吗
  • 其他应付款冲账分录
  • 员工奖励账务处理流程
  • 私车公用涉及的税种有哪些
  • 外购设备的会计分录
  • 个人垫付的费用如何向单位报销行政单位
  • 应纳税工资是应发还是实发
  • 资产负债表期初余额和期末余额
  • 社保可以不计提账务处理
  • 开餐饮店需要什么条件才能开
  • 房地产行业人工成本占比
  • window正在检查内存
  • linux 文字处理
  • vps 作用
  • win8磁盘占用率100%
  • win7插上u盘显示格式化怎么办
  • win7 64位系统重装后无线信号找不到的原因分析以及解决方法
  • 微软输入法拼音
  • cocos2dx入门
  • javascript判断语句
  • 用来检测程序小错误的测试方法
  • qq自动登出
  • 如何修改android studio的下载路径
  • Android中SQLite数据库的使用
  • 如何批量删除列表
  • 网管系统怎么用
  • [置顶]JM259194
  • 税务评估风险等级是什么
  • 官方客服热线人工台电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设