アンリアル日記

ゲームプログラマー2年目です。主に家庭用。

Engine Subsystemを使ってEditor Utility Widgetへの入力を反映する

はじめに

今回はゲーム内で使うキャラクターのステータスパラメータ(HPやMPなど)をEditorUtilityWidgetを使って変更できるようにしたいと思います。

色々やり方はあると思いますが、今回はEngine Subsystemを使ってみたかったのでそれを使ってやってみたいと思います。

Editor Utility Widgetとサブシステムに関してはおかずさんやキンアジさんの記事がとても分かりやすいです(いつもお世話になってますm( )m)

EditorUtilityWidget | キンアジのブログ

猫でも分かるUE4.22から入ったSubsystem

Editor Utility Widgetを作成その1(Designerモード)

パラメーターを調整するためのEditorUtilityWidget(EUW)を作成します。

f:id:taronoguchi:20200526152110p:plain

中身を編集していきます。

f:id:taronoguchi:20200526152127p:plain

Designerモードで☝のような感じで、HP調整用のSpinBoxとパラメータを反映させるためのボタンを追加します。

後ほどGraphモードで編集していきます。

Engine Subsystemの作成

ここでエンジンサブシステムを作っておきます。

何故エンジンサブシステムを使うかというと、単純に今回の目的を達するためにインスタンスとしての生存期間が理想的なのがEngineだったからです。

☞作業中もプレイ中も参照できるインスタンスとしてはEngineが理想的

と、判断しました。

では早速作っていきます。

f:id:taronoguchi:20200526152155p:plain

f:id:taronoguchi:20200526152210p:plain

EngineSubsystemをもとにC++クラス"EUWParameterKeeper"を作りました。

シンプルにHPというpublicな変数をBlueprintReadWriteで定義します。

f:id:taronoguchi:20200526152225p:plain

C++側はこれで終わりです。コンパイルしておきましょう。

TODO

何をしたいか一旦整理すると、

  1. SpinBox(EUW)で試したいパラメーターを入力(調整)する
  2. APPLYボタンを押したら、作ったエンジンサブシステムのメンバー変数HPにSpinBoxの値を反映する
  3. ゲームが始まったらキャラクターのBlueprintからエンジンサブシステムのメンバー変数HPを呼ぶ

といった感じですね。

それでは順にやっていきます。

Editor Utility Widgetを作成その2(Graphモード)

f:id:taronoguchi:20200526152246p:plain

キャラのBPにEngineSubsystemの値を反映

(異なる2つの変数HPができてしまうんでほんまは変数名、分けたほうがいいですね)

f:id:taronoguchi:20200526152302p:plain

Play

ここでゲームをプレイしてみると。

f:id:taronoguchi:20200526152317p:plain

デフォルトの0が表示されていますね。

ではEUWで値を変更してみましょう。

f:id:taronoguchi:20200526152332p:plain

Run Editor Utility Widgetで使えるようにして...

値を変更して👇

f:id:taronoguchi:20200526152347p:plain

APPLYを押すと👇

f:id:taronoguchi:20200526152404p:plain

f:id:taronoguchi:20200526152420p:plain

👆変更された値が表示されました。

では再度プレイしてみましょう。

f:id:taronoguchi:20200526152434p:plain

👆今変更した値が確かに反映されていますね!

最後に

今回はEditorUtilityWidgetでの値の変更ができるようにしてみました。EngineSubsystemを使わない方法もありますが、レベルに空のオブジェクトを置く必要がなかったり(他にやり方はあるかもしれませんが)するのでこちらを使ってみました。

Subsystem便利ですね!