PrintStringや、右クリックからのコンパイルオプションでの「デベロップメントオンリー」なノードで除外した際のフローについて調べました。
個別の検証を書いていますが、挙動の結果のみ必要な方は「まとめ」項へ→
間違ってたらごめんなさい。
UE4.22.3で検証
はじめに
右クリックからのコンパイルオプション操作をするには実験的機能を有効化する必要があります。
エディターの環境設定の「ブループリントエディタ」→「Allow Explicit Impure Node Disabling」
をONにすると冒頭のコンパイルオプション設定が行えるようになります。
「デベロップメントオンリー」の条件
パッケージを作る際の「Development」設定ではありません!
何なら出荷(Shipping)のパッケージでも除外されず動作しました。(4.22.3。何故……
プロジェクト設定の「Cooker」→「Compile Blueprints in Development Mode」
がONだと、「デベロップメントオンリー」なノードが実行され、
OFFだと、「デベロップメントオンリー」なノードが除外されます。
またエディター起動の際はどちらでも実行されます。
configファイル的には、DefaultEngine.iniの下記になります。
[/Script/UnrealEd.CookerSettings]
bCompileBlueprintsInDevelopmentMode=False
除外された後のノードの処理について
探っていきます
関数ノード
- SetActor*等や、デフォルトでデベロップメントオンリーなPrintStringのノード類
そのノードのみスキップされて、後の実行ピンへと処理が流れていきます。 - CastやAsyncLoad等のノード類
そのノード以降処理が行われなくなります
マクロ
自作
自作マクロでもうちょっと条件絞ってみます。
- 実行をスルーするだけのマクロ
そのノードのみスキップされて、後の実行ピンへと処理が流れていきます。 - Inputに実行ピンが2つあるマクロ
そのノード以降処理が行われなくなります - Outputに実行ピンが2つあるマクロ
そのノード以降処理が行われなくなります
挙動
挙動的に、Input/Outputどちらかの実行ピンが複数有ると以後の処理をカットするようです。
逆に1つずつだとスキップして以後の処理へ移るようです。おそらく。
「デベロップメントオンリー」ではなく、「無効(コンパイルしないで)」にした時の
実行ピンの色の付き具合がそのまま処理の流れで合っていそうです。
(上の緑枠は実行ピンが明るく実行される。下の水枠は実行ピンが暗くなってて実行されない)
まとめ
-
ノード右クリックのコンパイルオプション「デベロップメントオンリー」は「Development」パッケージ設定ではないです!
- プロジェクト設定の「Compile Blueprints in Development Mode」次第です
- エディター起動だとどちらでも実行されます
- 関数でもマクロでも、Input/Outputの両方の実行ピンが1つ以下だとそのノードのみをスキップ。
2つ以上あると以後のノード処理を無効化。
のようです。
C++のMetaのDevelopmentOnlyは未検証です。
自分は挙動に余り自信がなかったので、C++で上のようなノード作って動的に分岐してたりしていました。
UObjectの無駄使いですが……