MRが楽しい

MRやVRについて学習したことを書き残す

Unityでビルドが完了したタイミングでスクリプト処理を実行する

本日はUnityの小ネタ枠です。
Unityでビルドが完了したタイミングでスクリプト処理を実行する方法についてです。

PostProcessBuildAttribute

ビルドが完了したタイミングでスクリプト処理を実行するには PostProcessBuildAttribute 属性を利用します。
この属性を付与されたメソッドはビルドが完了した直後に処理が実行されます。
docs.unity3d.com

PostProcessBuildAttribute には引数のインデックスで実行優先度を指定することができます。
インデックスは 0 から順に処理が呼び出されます。複数の処理を特定の順番で呼び出したい場合に利用します。

[PostProcessBuildAttribute(0)]

サンプルスクリプト

ビルド完了時にビルドターゲットの種類と出力ファイルのパスをログ出力する以下のサンプルスクリプトを作成しました。
・PostProcessBuildTest.cs

using UnityEngine;
using UnityEditor;
using UnityEditor.Callbacks;

public class PostProcessBuildTest : MonoBehaviour
{
    [PostProcessBuildAttribute(1)]
    public static void OnPostprocessBuild(BuildTarget target, string pathToBuiltProject) {
        Debug.Log("Build completed");
        Debug.Log($"target: {target}");
        Debug.Log($"build project path : {pathToBuiltProject}");
    }
}


ビルド時の注意事項

PostProcessBuildAttributeはUnityEditorの名前空間を参照するため、通常のフォルダにスクリプトを配置しているとビルド時に以下のエラーが発生します。

error CS0246: The type or namespace name 'PostProcessBuildAttribute' could not be found (are you missing a using directive or an assembly reference?)


スクリプトをEditorフォルダに配置することでエディター用のスクリプトとして扱われ、ビルドには参照しないようにできます。

動作確認

サンプルスクリプトを作成したプロジェクトで適当なシーンをビルドします。

以下の通り、ビルドが完了したタイミングでログ出力の処理が実行できました。