添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

Intermediate Language,中间语言,面向对象的汇编语言

通过C#编译器mcs,将C#编译为IL(中间语言,byte code)
通过Mono运行时中的编译器将IL编译成对应平台的原生码

IL三种转译方式

即时编译(Just in time,JIT):程序运行过程中,将CIL的byte code转译为目标平台的原生码。
提前编译(Ahead of time,AOT):程序运行之前,将.exe或.dll文件中的CIL的byte code部分转译为目标平台的原生码并且存储,程序运行中仍有部分CIL的byte code需要JIT编译。
完全静态编译(Full ahead of time,Full-AOT):程序运行前,将所有源码编译成目标平台的原生码。

Unity跨平台的原理

Mono运行时编译器支持将IL代码转为对应平台原生码
IL可以在任何支持CLI,通用语言环境结构)中运行,IL的运行是依托于Mono运行时。

IOS不支持jit编译原因

机器码被禁止映射到内存,即封存了内存的可执行权限,变相的封锁了jit编译方式

c#代码生成的IL编码,由虚拟机的JIT编译执行,其中对象无须手动释放,由GC管理

非托管代码

C++/C#中以不安全类型写的代码,虚拟机无法跟踪

托管代码剥离

托管代码剥离过程将分析项目中的程序集,以查找和删除未实际使用的代码。分析过程使用一组规则来确定要保留的代码和要丢弃的代码。这些规则将在构建大小(包含太多代码)与风险(删除太多代码)之间进行权衡。Managed Stripping Level 设置可用于控制删除代码的激进程度。

Mono构建

  1. 构建应用非常快
  2. 由于Mono的JIT(Just In Time compilation ) 机制, 所以支持更多托管类库
  3. 支持运行时代码执行
  4. 必须将代码发布成托管程序集(.dll 文件 , 由mono或者.net 生成 )
  5. Mono VM在各个平台移植异常麻烦,有几个平台就得移植几个VM(WebGL和UWP这两个平台只支持 IL2CPP)
  6. Mono版本授权受限,C#很多新特性无法使用
  7. iOS仍然支持Mono , 但是不再允许Mono(32位)应用提交到Apple Store
    在这里插入图片描述

IL2CPP

  1. 相比Mono, 代码生成有很大的提高
  2. 可以调试生成的C ++代码
  3. 可以启用引擎代码剥离(Engine code stripping)来减少代码的大小
  4. 程序的运行效率比Mono高,运行速度快
  5. 多平台移植非常方便
  6. 相比Mono构建应用慢
  7. 只支持AOT(Ahead of Time)编译
    在这里插入图片描述

IL2CPP概括:

  1. Mono将c#翻译成IL
  2. IL2CPP得到IL转变为C++代码
  3. 再由各个平台C++编译器编译成可执行机器码
Mono跨平台ILIntermediate Language,中间语言,面向对象的汇编语言工作流通过C#编译器mcs,将C#编译为IL(中间语言,byte code)通过Mono运行时中的编译器将IL编译成对应平台的原生码IL三种转译方式即时编译(Just in time,JIT):程序运行过程中,将CIL的byte code转译为目标平台的原生码。提前编译(Ahead of time,AOT):程序运行之前,将.exe或.dll文件中的CIL的byte code部分转译为目标平台的原生码 场景资源管理器:用于遍历场景的变换层次结构的简单菜单。 GameObject Inspector :各种有用的工具,用于查看和操纵GameObject,类似于您在编辑器中可以执行的操作。 反射检查器:检查属性和字段。 也可以设置原始值并评估原始方法。 搜索:使用各种过滤器搜索 Unity Engine.Objects,或将帮助器用于静态实例和类。 C#控制台:具有一些基本帮助程序的交互式控
Il2 Cpp AssemblyUnho​​llower 从的输出生成 Managed-> IL2 CPP 代理程序集的工具。 这允许从受管域使用 IL2 CPP 域和其中的对象。 这包括泛型类型和方法、数组和新对象创建。 有些东西可能会被严重破坏。 构建或获取版本 使用获取虚拟程序集 运行AssemblyUnhollower --input=<path> --output=<output> --mscorlib=<path> 生成的程序集可以与您最喜欢的加载程序一起使用,该加载程序在 IL2 CPP 游戏进程中提供 Mono 域,例如 。 这对于 Unity 2018.4.x 游戏似乎运行良好,但需要更广泛的测试。 根据 .NET Core/.NET Framewor
调试模式/控制台用于调试MelonLoader内部。 所有插件都放置在游戏的“安装”文件夹内已创建的“插件”文件夹中。 所有Mod都放置在游戏的Install文件夹内创建的Mods文件夹中。 所有日志均在游戏的“安装”文件夹内创建的日志文件夹中进行。 为了正确使用dnSpy的调试器,请使用“调试模式/控制台”启动选项运行游戏。 自动安装: 确保要安装的游戏已关闭且未运行。 运行MelonLoader.Installer.exe。 单击选择按钮。 在游戏的安装文件夹中选择并打开游戏的EXE。 用于 Unity3D 游戏的.NET Mono 注入器。 转到。 Microsoft Developer Network for Reference Source,并提供本机C ++ Windows功能/结构/枚举文档。 Unity Technologies for Unity 游戏引擎(没有它们,就不会有太多的乐趣)。 罗伯特·吉塞克(Robert Giesecke)拥有出色的编译时库集(UnmanagedExports项目),并使之可以长时间保持最新(13天前更新)。 JämesMénétrey(ZenLulz)和其他在内存编辑库中做出过贡献的人(MemorySharp和Fasm.NET项目)。 JetBrains的高质量Microsoft Visual Studio生产力扩展(ReSharper产品)。 Unity Injector团队,用于开
一、 JIT AOT 是什么 JIT ,即Just-in-time,动态(即时)编译,边运行边编译; AOT ,Ahead Of Time,指运行前编译,是两种程序的编译方式 JIT 优点: ①可以根据当前硬件情况实时编译生成最优机器指令(ps. AOT 也可以做到,在用户使用是使用字节码根据机器情况在做一次编译) ②可以根据当前程序的运行情况生成最优的机器指令序列 ③当程序需要支持动态链接时,只能使用 JIT ④可以根据进程中内存的实际情况调整 代码 ,使内存能够更充分的利用 JIT 缺点: ①编译需要占用运行时资源
部件ID对应maskrgb的色块表 建筑部件ID去策划表中拿,找到对应的是门部件之类的,再出mask图中有门的抠图,抠图的颜色从上表中ID对应rgb取。调整完后编辑器的色相参数最好归0 shader流程 1.把原rgb色彩空间转hsv色彩空间 2.取不同rgbmask确定部位编号,然后不同部位取不同色相值
http://msdn.microsoft.com/library/z1zx9t92 http://msdn.microsoft.com/en-us/library/ht8ecch6(v=vs.90).aspx http://www. mono -project.com/ AOT 转载于:https://www.cnblogs.com/lilei9110/p/3431688.html...
使用枚举类型的Array的Contains方法,在IOS真机上报错 AOT , 经查,Contains方法属于System.Linq,但诸如 string[]、int[]等使用均不会有问题,枚举类型直接就真机调试挂了。。估计是使用了动态 代码 。 不使用Contains,直接使用一个for循环做判断。
1.带有增高垫IL的 c# c# 语言作为一种高级语言,是不能直接在我们的CPU上来直接运行的。 需要编译成IL语言(Intermediate Language)即中间层语言(就是这么高冷)。然后由我们的编译器编译成 底层的语言来到cpu运行。IL是将.NET 代码 转化为机器语言的一个中间语言,因此又把IL语言称之为伪汇编语言。 写 代码 如果要保护 代码 ,首先做窗体程序我就不怎么考虑 c# ,但是使用其它编程语言写门槛稍微高一些, 有时候为了写一个免费软件但是又不被别人拿去改成自己的,说真的就不想写了, c# 和java剽窃 代码 那是从源码级别进行剽窃的,这大大打击了写免费软件和收费软件的动力 现在,有了这个技术 ,再也不怕了 首先需要说明一点的是,winform(.net framework)和.net 的w... 所有StreamingAssets下的文件会被复制到包体。 所有Resource下的资源会被无条件打包。 所有加入到构建中的场景以及他们所引用的所有资源都会进入包体,如场景使用了模型,模型使用了材质,材质使用了shader和贴图,这些资源都被引用了。 其他一些闪...
unity 报错Applications/ Unity / Unity .app/Contents/ il2 cpp /build/deploy/ il2 cpp --convert-to- cpp --assembly=Library/Bee/artifacts/Android/ManagedStripped/System.Xml.Linq.dll --assembly=Library/Bee/artifacts/Android/ManagedStripped/ Unity Engine. Unity AnalyticsModule.dll
这个报错可能是因为 Unity 在尝试使用 il2 cpp Mono 脚本编译成C++ 代码 时出错了。以下是一些可能的解决方案: 1. 检查您的 Unity 项目的Build Settings中是否已经正确配置了Android平台的信息。如果没有,请重新配置。 2. 确认您的 Unity 项目中使用的 Mono 版本与 il2 cpp 所需的 Mono 版本相同。如果版本不同,可能需要更新 Unity 或使用正确的 Mono 版本。 3. 检查您的 Unity 项目中是否存在任何编译错误或警告。如果有,请尝试修复它们并重新编译。 4. 尝试使用 Unity Mono 编译器而不是 il2 cpp 。在Build Settings中将脚本后端设置为 Mono ,然后重新编译您的项目。 如果以上方法无法解决问题,请尝试重新安装 Unity 或联系 Unity 官方支持获取更多帮助。