Unity IUnityLinkerProcessor
Unity IUnityLinkerProcessor是Unity引擎中的一个接口,它容许开发者在Unity我的项目构建时对代码进行链接解决。这个接口能够用来优化我的项目构建大小,缩小不必要的代码和资源,进步我的项目的性能和加载速度。
接口定义
IUnityLinkerProcessor接口定义如下:
namespace UnityEditor.Build.IPA{ public interface IUnityLinkerProcessor { void OnBeforeRun(LinkXml linkXml); void OnProcessAssembly(string inputFile, string[] searchDirs, string outputFile); }}
其中,OnBeforeRun办法在Unity构建我的项目之前被调用,能够用来解决Link.xml文件。OnProcessAssembly办法在Unity构建我的项目时被调用,能够用来解决每个输出程序集。
Link.xml文件
Link.xml文件是Unity我的项目中的一个XML文件,用于指定须要保留的程序集、类型和成员。Link.xml文件的格局如下:
<linker> <assembly fullname="AssemblyName"> <type fullname="TypeName" preserve="method" /> </assembly></linker>
其中,assembly元素指定须要保留的程序集,fullname属性指定程序集的残缺名称。type元素指定须要保留的类型,fullname属性指定类型的残缺名称,preserve属性指定须要保留的成员类型,能够是method、field、property、event等。
应用例子
上面给出三个应用例子,别离演示如何应用IUnityLinkerProcessor接口来优化Unity我的项目的构建大小。
例子1:保留指定程序集
在Link.xml文件中指定须要保留的程序集,其余程序集将被删除。
<linker> <assembly fullname="Assembly-CSharp" /></linker>
在IUnityLinkerProcessor接口的OnBeforeRun办法中读取Link.xml文件,将须要保留的程序集增加到LinkerOptions中。
public void OnBeforeRun(LinkXml linkXml){ foreach (var assembly in linkXml.Assemblies) { if (assembly.Fullname == "Assembly-CSharp") { LinkerOptions.LinkAssemblies.Add(assembly.Fullname); } }}
例子2:保留指定类型和成员
在Link.xml文件中指定须要保留的类型和成员,其余类型和成员将被删除。
<linker> <assembly fullname="Assembly-CSharp"> <type fullnameMyClass"> <method signature="System.Void MyMethod()" /> </type> </assembly></linker>
在IUnityLinkerProcessor接口的OnBeforeRun办法中读取Link.xml文件,须要保留的类型和成员增加到LinkerOptions中。
public void OnBeforeRun(LinkXml linkXml){ foreach (var assembly in linkXml.Assemblies) { if (assembly.Fullname == "Assembly-CSharp") { foreach (var type in assembly.Types) { if (type.Fullname == "MyClass") { foreach (var method in type.Methods) { if (method.Signature == "System.Void MyMethod()") { LinkerOptions.LinkType(type.Fullname); LinkerOptions.LinkMethod(method.Signature); } } } } } }}
例子3:删除指定程序集
在Link.xml文件中指定须要删除的程序集,其余程序集将被保留。
<linker> <assembly fullname="Assembly-CSharp" remove="true" /></linker>
在IUnityLinkerProcessor接口的OnBeforeRun办法中读取Link.xml文件,将须要删除的程序集增加到LinkerOptions中。
public void OnBeforeRun(LinkXml linkXml){ foreach (var assembly in linkXml.Assemblies) { if (assembly.Remove) { LinkerOptions.DontLinkAssemblies.Add(assembly.Fullname); } }}
总结
通过应用Unity IUnityLinkerProcessor接口和Link.xml文件,开发者能够对Unity我的项目进行链接解决,优化我的项目的构建大小,缩小不必要的代码和资源,进步我的项目的性能和加载速度。在理论开发中能够依据我的项目的需要,灵便应用Link.xml文件和IUnityLinkProcessor接口,实现最佳的优化成果。
本文由博客一文多发平台 OpenWrite 公布!