2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ビルド前後に処理を挟む

Last updated at Posted at 2022-11-28

はじめに

「ビルド時に自動でバージョンを更新したい」「エディター上でだけ有効であってほしいアセットがある」など事情は様々でしょうが、そういった場合に使うであろう実装の話。
頻繁に使用する割に結構忘れるので、備忘録的に。

開発環境

  • 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はインターフェースIPreprocessBuildWithReportIPostprocessBuildWithReportを使えるようにするのに必要。
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

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?