PaperSloth’s diary

Unity(C#)、UE4(Blueprint/C++)についての記事を書いたり日常のことをつぶやきます。

UE4 検証で使用する際のBlueprint運用

目次

デバッグ用、無効なノードを設定する
・検証用のノードを用意する
・まとめ

環境

・Unreal Engine4.17.2

デバッグ用、無効なノードを設定する

Unreal C++で開発を行っている際はプリプロセッサの定義済みマクロを使用してDebug用のコードや検証用のコードを記述すると思います。
Blueprintではプリプロセッサ命令ほど便利ではありませんが、Compile Optionという便利な機能が用意されています。


Compile Optionを使用するにはエディターの環境設定を変更する必要があります。
Editor Preferences → ContentEditors → Blueprint Editorの中に設定項目があります。
Experimental → Allow Explicit Impure Node Disablingを有効にしましょう。
言葉で説明すると複雑ですが、図の項目を有効にするだけで使用可能になります。
f:id:PaperSloth:20171008002135p:plain


ノード上で右クリックするとCompileOptionsが選択できます。
f:id:PaperSloth:20171008001340p:plain

選択できるオプションは3つ用意されています。
 1.Disable(無効化)
 2.Enable Always(有効化)
 3.Enable Development Only(DevelopmentBuildで有効化)

Disableにすると上記画像のようにノードが半透明の状態になります。
EnableはAlways, Development Onlyのどちらにしても見た目上の違いがなさそうなので運用に注意が必要です。


検証用のノードを用意する

※ここで紹介する手法は個人的にこういうやり方をしているというだけの事例紹介です。

先ず、Blueprintで開発を行っているとプロジェクトが進むにつれてBlueprintが複雑になっていくと思います。
特にプレイヤー関連は大凡どのジャンルのゲームでもBlueprintが肥大化してしまうと思います。
下記はRoboRecallのプレイヤー関連のノードです。
f:id:PaperSloth:20171008005032p:plain

特別複雑でもないので追えなくはないですが、もう少し整理できそうな感じですね。

では、複雑にならないようにするために。
検証でどかっと書いた部分を分けることが出来れば整理する時にも楽そうだなと感じます。


それでは私が使用している手順を紹介します。

①BeginPlay, Tickをメイン開発用と検証用で分ける。
下図のような感じで複雑に組まれたプレイヤーがあると仮定します。
図ではノード一つですが、ごちゃごちゃしていると想像してください...
f:id:PaperSloth:20171008011009p:plain

そこに下図のような感じで検証用の初期化関数と更新関数を追加します。
今回はCustom Eventで追加しました。
f:id:PaperSloth:20171008011417p:plain

検証用のノードは先程紹介したCompile Optionを設定して開発専用にしたり無効にしたりします。
こうすることで大きなPlayerのBlueprintを複製せずとも検証用の要素を気軽に追加できます。


②検証用ノードを明確に分かるようにする。
単純にCustom Eventを追加しただけでは、管理の複雑さは変わりません。

そこで、検証用は全てEvent Graphを分けます。
Event Graphの追加はMy Blueprint WindowのGraphsから行えます。
f:id:PaperSloth:20171008012106p:plain

今回は下図のように追加しました。
f:id:PaperSloth:20171008012430p:plain

これで準備は整いました。
あとは検証用のノードグラフに好きなように色々と記述してください。
f:id:PaperSloth:20171008012957p:plain

Custom EventのCompile Optionsを変更して不要な検証用の要素は手軽に無効にできそうですね。
こんな感じで思い切ってEvent Graphを分けてみるのもいいかもしれません。

・まとめ

- BlueprintのCompile Optionsを活用しよう
 ただし、この機能は4.17.2時点でもまだ実験的機能なので注意。

- Event Graphを分けよう
 今回の使い方に限らず、Blueprintの管理がもっと簡単になるはず。
 ただし、何事もほどほどに。増やし過ぎると管理できなくなってもっと複雑になります。

- 今回検証していないこと
 Development Only, Disableにしていた場合に呼び出し先で
他のActorとの依存関係があった場合はパッケージングした際に未使用にも関わらずパッケージ内に含まれたりしないか。