【UE4】UMGのフェードアウト

概要

今回はUMGを用いて画面に表示したウィジェットのフェードアウトを実装していきます。質問や、これ以外に効率の良い方法があればコメント等にて教えていただけたら幸いです。

今回できるようになること

UMGを用いて画面に表示したウィジェットを自然な感じで消す機能を実装します。完成すると下のような動作になります。


実装手順

ウィジェットブループリントの作成

今回の例では、WASDで移動することを伝えるメッセージをUMGを用いて表示します。 まずはユーザーインターフェイス->ウィジェットブループリントを選択します。

f:id:unrealengineer:20200531230326p:plain
ウィジェットブループリントを作成

次にUIのレイアウトを作成していきますがこの際、下図のように全ての要素をまとめてCanvasPanelの子要素とし、そのCanvasPanelをBoderの子要素とします。(Borderは1つの子要素しか持てないため)

f:id:unrealengineer:20200531215457p:plain
全要素をPanelの子要素に

Borderの大きさは画面全体と同サイズ(1920x1080等)に、アピアランス->Brush Color->Aの値は0.0に設定します。

f:id:unrealengineer:20200531220953p:plain
Borderの設定

その他のレイアウトは皆さんの自由ですが今回は下図のようにしました。

f:id:unrealengineer:20200531215816p:plain
レイアウト例

②フェードアウトのアニメーション設定

今回は表示されてから4秒後にフェードアウトするものを想定します。 アニメーションウィンドウからアニメーションを新規作成します。ここでは名前をFadeOutにしました。

f:id:unrealengineer:20200531221353p:plain
新規アニメーションを作成

次に、詳細ウィンドウにてコンテンツ->Content Color and Opacity->Aの横にある+ボタンを押します。

f:id:unrealengineer:20200531222655p:plain
キーを追加

タイムラインウィンドウにてアニメーション範囲を0.00~4.50にし、4.00と4.50にContent Color and Opacity->Aのキーを打ちます。4.00では1.0のまま、4.50では0.00になるように設定します。

f:id:unrealengineer:20200531224009p:plain
4.00ではAの値を1.0に
f:id:unrealengineer:20200531224011p:plain
4.50ではAの値を0.0に

③レベルブループリントから呼び出し

最後に作成したUMGをレベルブループリントから呼び出します。まずはBeginPlayからウィジェットを作成、Classには先程作成したウィジェットブループリントを指定します。

f:id:unrealengineer:20200531224742p:plain
ウィジェットを作成

次に、Add to Viewportノードに繋いで画面に表示します。

f:id:unrealengineer:20200531224945p:plain
ウィジェットを画面に表示

そして下図のようにReturn Valueから先ほど作成したFadeOutをgetしてPlay Animationへと繋ぎます。

f:id:unrealengineer:20200531225214p:plain
アニメーションを再生

最後に、フェードアウトするまでの時間4.5sのDelayを挟んでRemove All Widgetsにより呼び出していたウィジェットを削除します。

f:id:unrealengineer:20200531225408p:plain
ウィジェットの消去

ここまでできたら、最初に貼ったようにメッセージ等がフェードアウトするはずです。