Engine Subsystemを使ってEditor Utility Widgetへの入力を反映する
はじめに
今回はゲーム内で使うキャラクターのステータスパラメータ(HPやMPなど)をEditorUtilityWidgetを使って変更できるようにしたいと思います。
色々やり方はあると思いますが、今回はEngine Subsystemを使ってみたかったのでそれを使ってやってみたいと思います。
Editor Utility Widgetとサブシステムに関してはおかずさんやキンアジさんの記事がとても分かりやすいです(いつもお世話になってますm( )m)
EditorUtilityWidget | キンアジのブログ
Editor Utility Widgetを作成その1(Designerモード)
パラメーターを調整するためのEditorUtilityWidget(EUW)を作成します。
中身を編集していきます。
Designerモードで☝のような感じで、HP調整用のSpinBoxとパラメータを反映させるためのボタンを追加します。
後ほどGraphモードで編集していきます。
Engine Subsystemの作成
ここでエンジンサブシステムを作っておきます。
何故エンジンサブシステムを使うかというと、単純に今回の目的を達するためにインスタンスとしての生存期間が理想的なのがEngineだったからです。
- ゲームインスタンスは?→EUWを利用して値を変更するときはまだゲームをプレイしていないのでゲームインスタンスが存在しないので✖
- エディターは?→Standaloneでプレイするときにエディターは呼ばれない(https://docs.unrealengine.com/ja/Gameplay/Framework/GameFlow/index.html)ので✖
☞作業中もプレイ中も参照できるインスタンスとしてはEngineが理想的
と、判断しました。
では早速作っていきます。
EngineSubsystemをもとにC++クラス"EUWParameterKeeper"を作りました。
シンプルにHPというpublicな変数をBlueprintReadWriteで定義します。
TODO
何をしたいか一旦整理すると、
- SpinBox(EUW)で試したいパラメーターを入力(調整)する
- APPLYボタンを押したら、作ったエンジンサブシステムのメンバー変数HPにSpinBoxの値を反映する
- ゲームが始まったらキャラクターのBlueprintからエンジンサブシステムのメンバー変数HPを呼ぶ
といった感じですね。
それでは順にやっていきます。
Editor Utility Widgetを作成その2(Graphモード)
キャラのBPにEngineSubsystemの値を反映
(異なる2つの変数HPができてしまうんでほんまは変数名、分けたほうがいいですね)
Play
ここでゲームをプレイしてみると。
デフォルトの0が表示されていますね。
ではEUWで値を変更してみましょう。
Run Editor Utility Widgetで使えるようにして...
値を変更して👇
APPLYを押すと👇
👆変更された値が表示されました。
では再度プレイしてみましょう。
👆今変更した値が確かに反映されていますね!
最後に
今回はEditorUtilityWidgetでの値の変更ができるようにしてみました。EngineSubsystemを使わない方法もありますが、レベルに空のオブジェクトを置く必要がなかったり(他にやり方はあるかもしれませんが)するのでこちらを使ってみました。
Subsystem便利ですね!