はなちるのマイノート

Unityをメインとした技術ブログ。自分らしくまったりやっていきたいと思いますー!

【Unity】IPreprocessBuildWithReport,IPostprocessBuildWithReportを利用してビルド前後に処理を挟む

はじめに

今回はIPreprocessBuildWithReportIPostprocessBuildWithReportを使ってビルド前後に処理を挟んでみるという記事になります。

概要

公式ドキュメントは以下の通り。

docs.unity3d.com

docs.unity3d.com

使い方

public class CustomBuildProcessor : IPreprocessBuildWithReport, IPostprocessBuildWithReport
{
    // 複数コールバックがある場合に呼ばれる順番の設定ができる(低い方が優先)
    public int callbackOrder => 0;
        
    /// <summary>
    /// ビルド完了後に実行される
    /// </summary>
    /// <param name="report">ターゲットプラットフォームや出力パスなど、ビルドに関する情報を含むBuildReport</param>
    public void OnPostprocessBuild(BuildReport report)
    {
        Debug.Log("ビルドされた後に呼ばれる");
    }

    /// <summary>
    /// ビルド開始前に呼ばれる
    /// </summary>
    /// <param name="report">ターゲットプラットフォームや出力パスなど、ビルドに関する情報を含むBuildReport</param>
    public void OnPreprocessBuild(BuildReport report)
    {
        Debug.Log("ビルドされる前に呼ばれる");
    }
}

インターフェイスを実装するだけなのでそこまで難しいことはないですね。

またBuildReportはビルドに関する情報が含まれており、いろいろな使い方ができそうです。
docs.unity3d.com

public void OnPostprocessBuild(BuildReport report)
{
    BuildTarget buildTarget = report.summary.platform;

    DateTime buildStartedAt = report.summary.buildStartedAt;
    DateTime buildEndedAt = report.summary.buildEndedAt;
    Debug.Log("Build Time : " + (buildEndedAt - buildStartedAt));
    Debug.Log("Build Time : " + report.summary.totalTime);

    Debug.Log("Output Path : " + report.summary.outputPath);

    BuildResult result = report.summary.result;
    switch (result)
    {
        case BuildResult.Cancelled:
            Debug.Log("Cancelled");
            break;
        case BuildResult.Failed:
            Debug.Log("Failed");
            break;
        case BuildResult.Succeeded:
            Debug.Log("Succeeded");
            break;
        case BuildResult.Unknown:
            break;
    }
}