はじめに
「ビルド時に自動でバージョンを更新したい」「エディター上でだけ有効であってほしいアセットがある」など事情は様々でしょうが、そういった場合に使うであろう実装の話。
頻繁に使用する割に結構忘れるので、備忘録的に。
開発環境
- Unity 2021.2~
実装例
#if UNITY_EDITOR
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
public class CustomBuildPreprocess : IPreprocessBuildWithReport
{
// 実行順
public int callbackOrder => 0;
// 事前実行
public void OnPreprocessBuild(BuildReport report)
{
/* 処理内容 */
}
}
#endif
解説
プリプロセッサディレクティブで条件を指定する
まず全体をプリプロセッサディレクティブで括り、UNITY_EDITOR
を指定します。
これらの処理はビルドに含めないため、括らないとエラーが出ます。
usingディレクティブの指定
下記を記述する。
using UnityEditor.Build;
using UnityEditor.Build.Reporting;
UnityEditor.Build
はインターフェースIPreprocessBuildWithReport
とIPostprocessBuildWithReport
を使えるようにするのに必要。
UnityEditor.Build.Reporting
はそれらで実装する関数の引数に指定するBuildReport
を使うのに必要です。
インターフェースを継承する
ビルド前かビルド後かで、適切なインターフェースを継承する。
IPreprocessBuildWithReport
はビルド前、IPostprocessBuildWithReport
ビルド後の処理を持つ。
callbackOrderを実装する
callbackOrderはビルドプロセスの実行順を指定します。
小さい数字の方が実行が早いです。
割り込み処理の内容を実装する
IPreprocessBuildWithReport
を継承しているならOnPreprocessBuild
を、IPostprocessBuildWithReport
を継承しているならOnPostprocessBuild
を実装する。
引数にはBuildReport
を指定する。
おわりに
ディレクティブで括って、インターフェースを継承して、関数を実装する。単純ですね。
バージョンによって実装方法が違いますが、現行のバージョンではこれで良いはずです。
公式ドキュメント
Unity - Scripting API: IPreprocessBuildWithReport
Unity - Scripting API: IPostprocessBuildWithReport
Unity - Scripting API: BuildReport