先に結論
全部 csc.rsp で定義するのが良さそう。
Scripting Symbols とは?
Scripting Symbolsと書いたが普段はDefineって呼んでる。
条件付きコンパイルやConditional属性を使うために必要
// DEBUGが定義されている時にしか実行されない。
#if DEBUG
Console.WriteLine("Debug version");
#endif
主に以下のような場合に使われる。
- Debug.Logを本番では実行しないようにする
- DebugMenuを本番以外でのみ使えるようにする
- configを環境によって使い分ける
要するに環境変数のようなもの
Unityでの Scriptiong Symbols の設定の仕方
一般的には Scripting Define Symbols が使われることが多いと思われる。
Version 2021.3
PlayerSettings開いて入力するだけなので楽ではある。
ただし、上記のURLにも書いてあるが、Scripting Define Symbols では手が届きにくいことがある。
それが、バッチビルドを行う時。
Setting scripting symbols in batch mode
you should not use Editor scripts to set scripting symbols within a batch mode CI server because the scripts will not be recompiled, so they will not be applied.
エディター スクリプトを使用してバッチ モード CI サーバー内でスクリプト シンボルを設定しないでください。スクリプトは再コンパイルされず、適用されません。
でその対策としてさらにその下にcsc.rsp
をAssets直下に作って
中に-define:UNITY_DEBUG
って書いたらUNITY_DEBUGというScripting Symbolsが定義されると書かれている。
また、
Note: If you want to modify only global scripting symbols, add them to the Scripting Define Symbols in the Editor via the Player Settings
window (as described above), because this covers all the compilers. If you choose the .rsp files instead, you need to provide one file for every compiler Unity uses.
と、
Scipting Define Symbols と .rspは併用してねと書かれている。
が、個人的には一箇所に集約できたほうがわかりやすいと思うので、.rspのみを推したい。
なお、Scripting Define Symbols と.rspを両方ある場合には、その両方が使用される。どちらかが上書きはされなかった。
具体的な使用方法
-define:DEV
ローカルで使うdefineをcsc.rspでつっこんでおく。
-define:PROD
別環境で使う.rspファイルを用意しておく
.PHONY: set-define
set-define:
cp ./config/define/prod.rsp ./Assets/csc.rsp
CIビルド時にcsc.rspを上書きする。
なお、上の例ではファイル直指定しているが、複数環境ある場合は環境変数によってコピーをわけたほうがよい。