BPノードが取り除かれるDevelopmentModeについて
BPノードは、DevelopmentModeかどうかに応じてパッケージ時にノードを取り除く(コンパイルしない)機能がある
このDevelopmentModeというの、ビルド設定の、Development、Shippingを見ているのかと思ったらなんか違うっぽく、実際にパッケージングして確認したものをまとめておきます
UE4 | 4.16.1 |
BPノードのコンパイル設定
これ関連の設定がProjectSettingsとEditorPreferencesにそれぞれ2箇所ある
- Project Settings > Engine > Cooker > Cooker > Compile Blueprints in Development Mode
- Editor Preferences > Content Editors > Blueprint Editor > Experimental > Allow Explicit Impure Node Disabling
Compile Blueprints in Development Mode
- デフォルトではEnable
- ここの設定がDevelopmentModeかどうかになっている
- Enableだと、DevelopmentModeになる、DisableだとDevelopmentModeではなくなる
- ビルド設定がShippingでも、ここがEnableならノードの除去は行われない
Allow Explicit Impure Node Disabling
- デフォルトではDisable
- この設定をEnableにすると、Blueprintノードを右クリックした際に、ノードを取り除くかどうか(コンパイルするかどうか)の設定メニューが追加される
- Always, DevelopmentOnly, Disableの3つのどれかを設定する、デフォルトはAlwaysになっている
フラグ | パッケージングの際、ノードが除去されるか |
---|---|
Always | されない |
DevelopmentOnly | DevelopmentModeでない場合、除去される |
Disable | 常に除去される |
C++のDevelopmentOnly指定子
C++でUFUNCTIONマクロに
UFUNCTION(..., meta = (DevelopmentOnly))
void Hoge();
という記述ができる、DebugDraw系関数やPrintStringにこれが書かれている
- この指定子がある関数は、デフォルトのコンパイル設定がAlwaysからDevelopmentOnlyに変わる(最終的にはエディタでの設定が採用される)
- Allow Explicit Impure Node DisablingがDisableでも、C++側でこれを指定した関数(ノード)はDevelopmentOnlyとしてパッケージングされる
ビルド設定に応じてコンパイルするかどうかの設定
DevelopmentModeではなく、BuildConfigrationを元にコンパイルするかどうかを設定したいみたいなのは、エディタ側からは設定できなさそう
#if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) // something #endif
C++でこのブロックで囲むやつでやりましょう
まとめ
- パッケージング時にノードを取り除く設定をエディタから使いたい時は、Allow Explicit Impure Node DisablingをEnableにする
- DevelopmentModeというのは、BuildConfigurationとは関係なく、Compile Blueprints in Development Modeで設定を行う
- 最終プロジェクトは、BuildConfigurationをShipping、Compile Blueprints in Development ModeをDisableにすると良さそう