Unity构建详解(2)——SBP的初始设置和脚本编译
【SwitchToBuildPlatform】
核心逻辑如下
EditorUserBuildSettings.SwitchActiveBuildTarget(m_Parameters.Group, m_Parameters.Target);
直接调用切换平台的接口,一般来说,这个步骤不会执行,我们打包时肯定会事先将平台切换好的
【RebuildSpriteAtlasCache】
核心逻辑如下
SpriteAtlasUtility.PackAllAtlases(m_Parameters.Target);
也是直接调用unity提供的接口,重新打包图集,这一步也可以完全自己做,一般会根据项目的实际情况,自己做图集打包。
【BuildPlayerScripts】
编译源代码,生成TypeDB类型的ScriptInfo。TypeDB(类型数据库)是一个用于存储所有类型信息的数据库。
TypeDB包含了Unity中所有的类、结构体、枚举、委托,类的名称、命名空间、父类、成员变量、方法等信息,它是Unity的一个核心组件,可以用来进行反射和序列化等操作,可以通过C#代码或Unity编辑器中的各种工具来访问和修改。
核心代码为
PlayerBuildInterface.CompilePlayerScripts(m_Parameters.GetScriptCompilationSettings(), m_Parameters.ScriptOutputFolder);
这里步骤是可选得,在BuildApp时做,其可以用增量缓存,会生成一系列的文件和Dll,如果有缓存,可以直接读取。输出路径是配置项,默认值为"Library/PlayerScriptAssemblies"。
ScriptAssemblies文件夹中的dll时Editor下用的。
如果要自己编译程序集,也是用该接口。
编译的过程可以做可视化
【使用Native接口】
Native接口的实现都在C++,在C#调用C++用的是P/.Invoke机制。
一般来说参数和返回值都要是Blittable类型,稍微复杂点的会被封装成结构体,只有非常复杂的才会用类。
SBP中有很多调用Native接口的地方,会看到很多参数和返回值都是结构体。
编译脚本时的ScriptCompilationSettings和ScriptCompilationResult都是结构体