みつまめ杏仁

アンリアルエンジン(UE4)でGUIを作るためにゴニョゴニョしてます。UIデザイナーの皆様の助けになれば幸いです。

「ぷち」っとタイマーを作る

UMGでタイマー表示をつくってみたので、「ぷち」っとご紹介。ぶっちゃけ「ぷちコン」用の制作メモみたいなものです。過去にテクスチャを使ったやつを記事にしているんだけど、今回はNo Texture です。UMGです。

 

タイマー表示にもいろいろあるのですが、今回は 100分の1秒を表示するタイプです。細かい数字がせわしなく動くと、急かされる印象を与えることができます。

さらに残り時間を感覚的に伝えるために、数字だけでなく円ゲージも合わせて動かします。

 

さっそく タイマー表示用のWidgetブループリントを作成。

キャンバスに TextBlock を3つ配置。 30秒想定です。

f:id:hiyokosabrey:20180816000112j:plain

外側のリングは、Image で、マテリアルをセットします。

マテリアルは以下。

f:id:hiyokosabrey:20180816000726p:plain

Value と書かれたノードは Scalar Parameter です。リングの太さや大きさを調整する場合は、Add ノードで、少しだけ値を足してやります。

f:id:hiyokosabrey:20180816001235p:plain

すると、プレビューウィンドウ内が↓のようになります。

f:id:hiyokosabrey:20180816001308p:plain

調整が終われば Add ノードは 削除します。

Valueの値が 0.0 ~ 1.0 に変化するとこうなります。

f:id:hiyokosabrey:20180816002304p:plain

 

ブループリントを編集していきます。

まず残り時間を管理する変数を3つ用意します。Float型です。

f:id:hiyokosabrey:20180816015607p:plain

0.2 を掛けているのは、残り 20%以下になったら点滅させるので、その判定用の変数です。

マテリアルのパラメーターをいじるので、早い段階でDynamic Material Instance 化しておきます。

f:id:hiyokosabrey:20180816003051p:plain

この場合、Add to Viewport した直後になります。

 

このWidgetが表示されてすぐにタイマーが動き出すのを防ぐために、Boolean型の変数を1つ用意してフラグとして使います。

 

カウントダウン開始は、他のブループリントからの呼び出しが合図です。

そのためのカスタムイベントを用意してフラグを立てるようにします。

f:id:hiyokosabrey:20180816004029p:plain

カウントダウン開始で「Ready?」 から 「Go!!!」に変えるのですが、少ししたらフェードアウトするように、アニメーションを作って再生しています。

f:id:hiyokosabrey:20180816004652p:plain

 

タイマーの心臓部を作っていきます。

f:id:hiyokosabrey:20180816005613p:plain

続き

f:id:hiyokosabrey:20180816012317p:plain

タイマーがゼロになったら、次の表示に進めるために、イベントディスパッチャーを用意してCall(呼び出し)でつないでいます。

f:id:hiyokosabrey:20180816012331p:plain

グラフにドラッグ&ドロップするときに選択します。

f:id:hiyokosabrey:20180816012527p:plain

 

表示更新用の関数はこんな感じ。

f:id:hiyokosabrey:20180816013044p:plain

続いて 小数部分。

f:id:hiyokosabrey:20180816013635p:plain

何をやっているかというと、小数点を境に数字を取り分けています。

例えば  23.4567 という値があったとしたら、まずは整数部分。

f:id:hiyokosabrey:20180816014204p:plain

次は 小数部分。

f:id:hiyokosabrey:20180816014856p:plain

最後は、リングゲージへの反映です。

f:id:hiyokosabrey:20180816015851p:plain

これで出来上がりです。

 

テストしてみます。

f:id:hiyokosabrey:20180816021013j:plain f:id:hiyokosabrey:20180816021023j:plain

f:id:hiyokosabrey:20180816021039j:plain f:id:hiyokosabrey:20180816021051j:plain

 

実際は、HUDクラスのブループリントを用意して、

f:id:hiyokosabrey:20180816022325p:plain

そこからカウントダウン開始のカスタムイベントを呼び出します。HUDブループリントの Event BeginPlay で、Create Widget して ReturnValue を変数化しておくのがポイント。

f:id:hiyokosabrey:20180816021835p:plain

で HUD用のWidgetをまとめて Add to Viewport します。

f:id:hiyokosabrey:20180816022458p:plain

タイマー作動させるイベント。

f:id:hiyokosabrey:20180816023024p:plain

カウントダウンが終了したらリザルト表示に移行。タイマー作動と同時にイベントディスパッチャーに対してバインド(紐づけ)しておけば、勝手に流れてくれます。

 

最終的に、このHUDのタイマー作動イベントを呼ぶヤツが必要になるのですが、何がトリガーになるかはゲームの内容次第なので、ひとまず今回はこの辺までにしておくことにします。

 

思ったより「ぷち」っという感じにならなかったですね。テキストの表示だけだったらシンプルに作れますが、ちょっと欲張ってしまいました。

 

ではでは

ステキなタイマーライフを!