🐸

UnityCloudBuildで環境ごとにビルドする【シンボル編】

2021/07/28に公開

UnityCloudBuildで環境ごとにビルドするではUnityCloudBuildのPre- and post-export methodsを使用して環境ごとにビルドする方法を書きましたが、もう1つシンボルを使った方法をまとめます。

  1. シンボルとは
  2. Unityでのシンボルの定義
  3. 作成したプログラム
  4. UnityCloudBuildでのビルド
  5. 最後に

シンボルとは

凄く詳しく知りたい場合はC# プリプロセッサ ディレクティブを見てください。ここでは必要な部分だけ記載します。

C#ではプリプロセッサ ディレクティブを使用して、条件付きコンパイルができます。

#if DEBUG
    Console.WriteLine("Debug version");
#elif PRODUCT
    // 何か処理
#endif

こういうものです。上記のDEBUGPRODUCTがシンボルと呼ばれるものです。上記のコードの場合、DEBUGだけがシンボルとして定義されていればConsole.WriteLine("Debug version");が実行されます。PRODUCTだけがシンボルとして定義されていれば// 何か処理が実行されます。

Unityでのシンボルの定義

Unity EditorではBuild Settings > PlayerSettings > Other Settings内のScripting Define Symbolsで定義することができます。

作成したプログラム

簡易的に、定義したシンボルの設定を読み込み動作するプロジェクトを作成しました。

PRODUCTシンボルを定義して実行した場合は以下のようになります。

環境に対応する設定を取り出す実装は下記の通りです。簡単です。

    private Environment GetEnvironmentInner()
    {
#if DEVELOP
        return _Environments[0];
#elif PRODUCT
        return _Environments[1];
#else
        return _Environments[0];
#endif
    }

UnityCloudBuildでのビルド

UnityCloudBuildで環境ごとにビルドするでは前処理としてスクリプトを用意しましたが、シンボルの場合は不要です。ビルド設定を作成し、カスタム定義を指定するだけです。
UnityCloudBuildで開発用と本番用、2つのビルドターゲットを用意します。
開発用のビルドではカスタム定義にDEVELOP
本番用のビルドではカスタム定義にPRODUCT
設定します。

ビルドした結果です。

開発用のビルド

本番用のビルド

最後に

Pre- and post-export methodsを使用する方法と、シンボルを使用する方法どちらもご紹介しました。一概にどちらがいいとは言えません。

メリット デメリット
Pre- and post-export methods 誤コミットによる影響が少ない スクリプトを用意する必要がある
シンボル 簡単 Unity Editorで定義されたScripting Define Symbolsも当然読み込まれるので誤コミットで意図しないビルドになる場合がある

個人的には使用する環境やビルドの種類が少ないのであればシンボルが簡単でいいんじゃないかと思います。

Discussion