Advanced Turn Based Tile Toolkit for UE4の使い方[実践編④] ターン数の表示

Post 2021年3月5日金曜日

Advanced Turn Based Tile Toolkit TBS(ターン制ストラテジー) UE4 アセット

前回の続き。サムネ用に画像を貼り付けしておきます。

ぜひ基礎編を開きながらご覧ください。



お約束
この記事作成にあたって使用した(主な)UE4バージョン4.26.1
このtoolkitのバージョンv3.0 (live 12.12.20)


本日のゴール

現在のターン数を画面に表示する


原理

このアセットにおいて、ターンに関係するところは大体「BP_TurnManager」が司ります。

「BP_TurnManager」の「Current Turn」という変数がターン数を表すので、これをUIに送ってやれば、基本的には終わりです。

ただし

じつはCurrent Turnに1が足されるのは、敵が動き出すタイミングなのです。(なんでや…)

これをなんとかできないか?と作者にDiscordを使って質問したら、回答が返ってきたので、記事にしました。(素晴らしいですね)

イベントディスパッチャーを使って、味方キャラが動き出すタイミングで、UIにターン数をアップデートするように命令するというやり方です。


最終形

「BP_TurnManager」




「BP_Action_NewTurn (新規作成)」



「TurnNumberHUD (新規作成)」



やり方(準備編)

まずBP_Actionを親として、新しい子のブループリントを作成します。
名前はこんな感じにしました(BP_Action_NewTurn)。↑


次に、「BP_TurnManager」に戻ります。
Event Dispatcherというのが左下にあるはずなので、これを新しく作ります。
名前はこんな感じに

これを選択したままで、右上を見ると、詳細画面が出ています。
Input (入力)を増やしましょう。適当に名前をつけて、型を「Integer(整数)」にします。これがイベントディスパッチャーに乗せるターン数になります。

では、「BP_TurnManager」のイベントグラフを見ます。
見るところはBegin New Turnです。

その中に、こんな記述があります。ここを修正しましょう。++の次にノードを加えます。

Spawn Actorします。

先程作ったブループリントの名前を選びます。


ここまで来たら、コンパイルして(エラーが出るけど無視)、一回先程作ったブループリント「BP_Action_NewTurn」の、イベントグラフを開きます。
右クリックして「Event Play Action」を作成します。


これに何をつなぐかというと、そう。イベントディスパッチャーです。

「BP_TurnManager」のさっき作ったイベントディスパッチャーを、今触っていたブループリントにドラッグ・アンド・ドロップしてください。



一番上の呼び出し(だったっけ?)を選択。


これをEvent Play Actionにつないだ後、Targetから伸ばして「BP_TurnManager」をGetしてつなぎます。


CurrentTurnDisplayから伸ばして変数に昇格

この変数に対して、インスタンスで編集可と、スポーン時に公開、をチェックします。


イベントディスパッチャー呼び出しの後にEndActionをつなぎます。


最終形。





コンパイルしたら、また「BP_TurnManager」に戻ってきます。

こっちでもコンパイルをすると、こんな感じでエラーが出たままですが、

「Current Turn Display」という入力が増えています。



ここにCurrent Turnをつないであげましょう。


で、コンパイルしてもエラーが出続けるので、対応します。

どうやらSpawn Transformがこのままだといけないらしいので、Spawn Transformを右クリックしてピンを分割します。(分割すれば座標の値とかに勝手に0が入るからですね)


これでコンパイルが通ります。

これで準備完了です!!


やり方(UI編)

UIを作成します。どこかのフォルダで右クリックして、「エディターユティリティウィジェット」

名前はこんな感じ(TurnNumberHUD)↑


編集画面で、「text」を2個ドラッグ・アンド・ドロップします。


どちらもフォントを72くらいに


1つ目のtextの内容を、「Turn : 」にしておきます。

2つ目のtextの配置をこの辺に。Is variableをオンにします。


グラフを開きます



さて、このイベントグラフに再び「BP_TurnManager」からイベントディスパッチャーをドラッグ・アンド・ドロップします。ただし今度は「バインド」を選択します。


これをEvent Constructにつないであげて、その後Eventからノードを引っ張って、「カスタムイベントを追加」をクリックしましょう。

名前は何でもいいですが、「UpdateTurn」とでもしましょうか。


忘れずに、真ん中には、TurnManagerを繋がないと動きませんのでつないであげます。


次に、TextBlockを引っ張ってきてGetしましょう。このTextBlockというのは先程我々が作ったやつです。人によっては少し名前が違うかもしれません。


このTextBlockからノードを伸ばして、「set text」を調べましょう。


この作ったノードを、「Update Turn」につなげます。

Set textはテキストブロックに文字をセットするノードですが、何をセットするのかといえばそりゃターン数です。ターン数は先程のUpdate Turnが持ってましたので、これをつないであげます。すると最終的にこうなります。


これで完成!!コンパイルします。


さてこれだけだと、UI作っただけなので、実行時に表示されません。Create Widgetして、viewportに追加しないといけません。レベルブループリントでもどこでもいいんですが、今回はターンマネージャーに追加してみましょう。

「BP_TurnManager」を開き、Event Begin Playを右クリックして呼び出してあげて、ここにCreate Widgetを使って先程作ったUI「TurnNumberHUD」を呼び出してあげます。これにAdd to Viewportをつないであげればいっちょ上がりです。

コンパイルして実行しましょう。

ちゃんと自キャラが動く時にターン数が増えるようになりました!!成功ですね。


次回

未定。ワープの作成をする予定ではあります。(苦戦中)