网站突然掉排名了,中国建设银行网站 个人客户,外贸营销单页网站,世界500强企业排名2020Mono#xff1a;这是 Unity 最初采用的方式#xff0c;它将 C# 代码编译为中间语言 (IL)#xff0c;然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP#xff1a;这是一种较新的方法#xff0c;它会将 C# 代码先编译为 C 代码#xff0c;再由 C 编译器… Mono这是 Unity 最初采用的方式它将 C# 代码编译为中间语言 (IL)然后在目标平台上使用虚拟机 (VM) 将其转换为本地机器码执行。 IL2CPP这是一种较新的方法它会将 C# 代码先编译为 C 代码再由 C 编译器生成针对特定平台优化后的二进制文件。这种方法通常能带来更好的性能并且更容易集成到不同的操作系统中。 IL2CPP 提供了一些显著的优点比如更高的运行效率和更小的应用体积。然而它也有一些局限性例如无法像 Mono 那样动态生成代码这意味着你必须提前确定所有要用到的类型。如果某些类型是在运行时才决定使用的例如通过反射或泛型那么你需要采取特别措施来确保它们不会被裁剪掉。
1、调整剥离级别
在Unity的设置中有一个叫做“Managed Stripping Level”的选项可以选择不同的级别控制IL2CPP的裁剪程度 2、使用Link.xml文件
你可以通过在Unity项目中或其任何子目录中创建一个Link.xml文件告诉Unity哪些类型不能被删掉确保它们在打包时不会被裁剪掉。
link.xml语法规则
?xml version1.0 encodingUTF-8?!--保存整个程序集--assembly fullnameUnityEngine preserveall/!--没有“preserve”属性也没有指定类型意味着保留所有--assembly fullnameUnityEngine/!--完全限定程序集名称--assembly fullnameAssembly-CSharp, Version0.0.0.0, Cultureneutral, PublicKeyTokennulltype fullnameAssembly-CSharp.Foo preserveall//assembly!--在程序集中保留类型和成员--assembly fullnameAssembly-CSharp!--保留整个类型--type fullnameMyGame.A preserveall/!--没有“保留”属性也没有指定成员 意味着保留所有成员--type fullnameMyGame.B/!--保留类型上的所有字段--type fullnameMyGame.C preservefields/!--保留类型上的所有方法--type fullnameMyGame.D preservemethods/!--只保留类型--type fullnameMyGame.E preservenothing/!--仅保留类型的特定成员--type fullnameMyGame.F!--类型和名称保留--field signatureSystem.Int32 field1 /!--按名称而不是签名保留字段--field namefield2 /!--方法--method signatureSystem.Void Method1() /!--保留带有参数的方法--method signatureSystem.Void Method2(System.Int32,System.String) /!--按名称保留方法--method nameMethod3 /!--属性--!--保留属性--property signatureSystem.Int32 Property1 /property signatureSystem.Int32 Property2 accessorsall /!--保留属性、其支持字段如果存在和getter方法--property signatureSystem.Int32 Property3 accessorsget /!--保留属性、其支持字段如果存在和setter方法--property signatureSystem.Int32 Property4 accessorsset /!--按名称保留属性--property nameProperty5 /!--事件--!--保存事件及其支持字段如果存在添加和删除方法--event signatureSystem.EventHandler Event1 /!--根据名字保留事件--event nameEvent2 //type!--泛型相关保留--type fullnameMyGame.G1!--保留带有泛型的字段--field signatureSystem.Collections.Generic.List1lt;System.Int32gt; field1 /field signatureSystem.Collections.Generic.List1lt;Tgt; field2 /!--保留带有泛型的方法--method signatureSystem.Void Method1(System.Collections.Generic.List1lt;System.Int32gt;) /!--保留带有泛型的事件--event signatureSystem.EventHandler1lt;System.EventArgsgt; Event1 //type!--如果使用类型则保留该类型的所有字段。如果类型不是用过的话会被移除--type fullnameMyGame.I preservefields required0/!--如果使用某个类型则保留该类型的所有方法。如果未使用该类型则会将其删除--type fullnameMyGame.J preservemethods required0/!--保留命名空间中的所有类型--type fullnameMyGame.SomeNamespace* /!--保留名称中带有公共前缀的所有类型--type fullnamePrefix* //assembly
/linker学习自【unity进阶篇】unity如何实现跨平台及unity最优最小包体打包方式.NET、Mono和IL2CPP知识介绍-CSDN博客