此所有实现都是编辑器代码,主要用于我们构建播放器后的一些个性化,差异化,自动化流程的启动时机。
1.目标平台切换接口
IActiveBuildTargetChanged
当切换建平台后,实现此接口以接收回调信息。
示例代码
/// <summary>
/// 当平台被切换时接收切换消息
/// </summary>
public partial class ApplicationBuild : IActiveBuildTargetChanged
{
/// <summary>
/// 数值越低越调用越早调用
/// </summary>
public int callbackOrder => 0;
public void OnActiveBuildTargetChanged(BuildTarget previousTarget, BuildTarget newTarget)
{
Debug.Log($"被切换的目标:{previousTarget},切换到的目标:{newTarget}");
}
}
Tips
- 我们可以使用
EditorUserBuildSettings.SwitchActiveBuildTarget()
进行当前的构建平台的切换。
2.构建时剔除指定程序集
IFilterBuildAssemblies
将在生成脚本程序集后调用,可以进行筛选删除不需要的程序集。
示例代码
/// <summary>
/// 将在生成脚本程序集后调用,可以进行筛选删除不需要的程序集。
/// </summary>
public partial class ApplicationBuild : IFilterBuildAssemblies
{
/// <summary>
/// 数值越低越调用越早调用
/// </summary>
public int callbackOrder => 0;
/// <summary>
/// 将在生成脚本程序集后调用,可以进行筛选删除不需要的程序集。
/// </summary>
/// <param name="buildOptions">构建选项,位掩码</param>
/// <param name="assemblies">当前程序集列表</param>
/// <returns>返回构建中已过滤的程序集列表,不支持增加新程序集。</returns>
public string[] OnFilterAssemblies(BuildOptions buildOptions, string[] assemblies)
{
Debug.Log($"构建选项:{buildOptions}");
//剔除Test.dll程序集
return assemblies.Where(x=>x!= "Library/PlayerScriptAssemblies/Test.dll").ToArray();
}
}
Tips
- BuildOptions 采用位掩码技术,可将多个选项合并到一起。
- 只能做过滤用不能增加新程序集。如果新增可采用构建完成回调,将文件复制过去。
3.构建完成播放器脚本后回调
IPostBuildPlayerScriptDLLs
构建完成播放器脚本后立刻回调此接口
示例代码
/// <summary>
/// 构建播放器脚本后立即回调此接口。
/// </summary>
public partial class ApplicationBuild : IPostBuildPlayerScriptDLLs
{
/// <summary>
/// 数值越低越调用越早调用
/// </summary>
public int callbackOrder => 0;
/// <summary>
/// 构建播放器脚本后立即回调此函数。
/// </summary>
/// <param name="report">构建信息</param>
public void OnPostBuildPlayerScriptDLLs(BuildReport report)
{
Debug.Log($"目标平台:{report.summary.platform},输出位置:{report.summary.outputPath}");
}
}
Tips
- 在
IFilterBuildAssemblies
接口之后,OnPostprocessBuild
之前。
4.构建完成后回调
IPostprocessBuildWithReport
构建完播放器后回调此接口
示例代码
/// <summary>
/// 构建完成后,实现此接口以接收回调。
/// </summary>
public partial class ApplicationBuild : IPostprocessBuildWithReport
{
/// <summary>
/// 数值越低越调用越早调用
/// </summary>
public int callbackOrder => 0;
/// <summary>
/// 构建完成后,实现回调此函数。
/// </summary>
/// <param name="report"></param>
public void OnPostprocessBuild(BuildReport report)
{
Debug.Log($"[OnPostprocessBuild]目标平台:{report.summary.platform},输出位置:{report.summary.outputPath}");
}
}
Tips
- 在所有相关接口之后回调。
IPreprocessBuildWithReport
可作为构建播放器的开始,IPostprocessBuildWithReport
可作为构建播放器的结束。- 通常我们在这里做一些文件导入工作和额外配置工作等,如启动自解压工作,导入第三方插件库,或者批处理等相关工作。
5.构建开始前回调接口
IPreprocessBuildWithReport
构建播放器前,实现此接口以接收回调。
示例代码
/// <summary>
/// 构建完成后,实现此接口以接收回调。
/// </summary>
public partial class ApplicationBuild : IPreprocessBuildWithReport
{
/// <summary>
/// 数值越低越调用越早调用
/// </summary>
public int callbackOrder => 0;
/// <summary>
/// 构建播放器前,回调此函数。
/// </summary>
/// <param name="report">构建信息</param>
public void OnPreprocessBuild(BuildReport report)
{
Debug.Log($"[OnPreprocessBuild]目标平台:{report.summary.platform},输出位置:{report.summary.outputPath}");
}
}
Tips
- 在所有相关流程接口前。
IPreprocessBuildWithReport
可作为构建播放器的开始,IPostprocessBuildWithReport
可作为构建播放器的结束。
6.每个场景构建期间回调接口
IProcessSceneWithReport
7.编译shader前回调接口
IPreprocessShaders
8.编译ComputeShader前接口回调
IPreprocessComputeShaders
9.与UnityLinker 的运行相关的接口回调
IUnityLinkerProcessor
10.Android 构建完Gradle后的回调
IPostGenerateGradleAndroidProject
生成 Android Gradle 项目后,实现该接口以接收回调。
- 可对Gradle项目进行差异化处理,如多渠道多平台自动化,前提是你非常熟悉Gradle项目。
- Android Gradle 项目生成之后且构建开始之前的回调。