#memo

indiedev太郎

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ノードを右クリックした際に、ノードを取り除くかどうか(コンパイルするかどうか)の設定メニューが追加される

https://i.gyazo.com/b3849adbac46591705ad594e55fed8c7.png

  • 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にすると良さそう