以下の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/12/22/233103より取得しました。


Unityでビルドの実行前または完了後に処理を行う

本日はUnityの小ネタ枠です。
Unityでビルドの実行前または完了後に処理を行う方法についてです。

ビルドの実行前または完了後に処理を行う

ビルドの実行前に処理を行うにはIPreprocessBuildWithReportインタフェースを、完了後に処理を行うにはIPostprocessBuildWithReportインタフェースを利用します。
docs.unity3d.com
docs.unity3d.com
docs.unity3d.com

それぞれUnityEditorの名前空間を利用するため、作成したスクリプトはAssets/Editorフォルダ配下に配置する必要がある点に注意してください。

Editorフォルダ配下に配置しない場合、ビルド時に以下のようなエラーが発生します。

error CS0234: The type or namespace name 'Build' does not exist in the namespace 'UnityEditor'

ビルドの実行前に処理を行う

IPreprocessBuildWithReportインタフェースを実装すると、OnPreprocessBuild関数でビルド前の処理が実行できます。

using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;

public class BuildPreProcessTest : IPreprocessBuildWithReport
{
    // 処理の優先度(値が低いほど先に実行される)
    public int callbackOrder => 0;
    
    // ビルド前に実行される処理
    public void OnPreprocessBuild(BuildReport report)
    {
        Debug.Log($"ビルド前の処理を行います。優先度は{callbackOrder}です");
    }
}

ビルドの完了後に処理を行う

IPostprocessBuildWithReportインタフェースを実装すると、OnPreprocessBuild関数でビルド前の処理が実行できます。

using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;

public class BuildPostProcessTest : IPostprocessBuildWithReport
{
    // 処理の優先度(値が低いほど先に実行される)
    public int callbackOrder => 0;
    
    // ビルド完了後に実行される処理
    public void OnPostprocessBuild(BuildReport report)
    {
        Debug.Log($"ビルド完了後の処理を行います。優先度は{callbackOrder}です");
    }
}

動作確認

IPreprocessBuildWithReportとIPostprocessBuildWithReportは1つのクラスに合わせて実装することもできます。
前述のサンプルスクリプトに加えて以下のサンプルスクリプトをUnityプロジェクトに配置して動作確認を行いました。

using UnityEditor.Build;
using UnityEditor.Build.Reporting;
using UnityEngine;

public class BuildProcessTest : IPreprocessBuildWithReport, IPostprocessBuildWithReport
{
    // 処理の優先度(値が低いほど先に実行される)
    public int callbackOrder => 100;
    
    // ビルド前に実行される処理
    public void OnPreprocessBuild(BuildReport report)
    {
        Debug.Log($"ビルド前の処理を行います。優先度は{callbackOrder}です");
    }

    // ビルド完了後に実行される処理
    public void OnPostprocessBuild(BuildReport report)
    {
        Debug.Log($"ビルド完了後の処理を行います。優先度は{callbackOrder}です");
    }
}

以下の通りビルド実行前と完了後のタイミングでcallbackOrderの優先度に従い処理が実行されました。




以上の内容はhttps://bluebirdofoz.hatenablog.com/entry/2024/12/22/233103より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14