💬

UE4 UMGでフェード機能を実装した話

2020/09/21に公開

はじめに

UE4のUI用機能であるUMGでフェード機能を実装した話です。
バージョン 4.25.3
UMGのドキュメント

要件

以下の要件を満たした実装を考えます。

  • フェード時間を指定する。
  • フェード終了時に任意の処理を呼び出す。
  • アニメーションで動かす。

それぞれ実装方法を考えていきます。

アニメーション

UMGの機能にあるアニメーションを使います。
https://docs.unrealengine.com/ja/Engine/UMG/UserGuide/Animation/index.html
ここでフェードを使用する際に時間を指定することを考えて、1秒のフェードアニメーションを作成しておきます。
指定した時間でアニメーション速度を変えることで任意の時間のアニメーションにすることができます

フェード時間を指定する

UMGのブループリントでPlayAnimationノードを使用してアニメを再生する際にPlaybackSpeedを指定することで1秒のアニメーションを指定の時間にします。

引数のSecondsを逆数にすることで3秒のとき1/3速度になり、1秒のアニメーションが3秒のアニメーションになります。0.5秒を指定すれば1/0.5で2倍速となり0.5秒のアニメーションになります。

フェード終了時に任意の処理を呼び出す

任意の処理を呼び出す仕組みとしてイベントディスパッチャーが用意されています。
https://docs.unrealengine.com/ja/Engine/Blueprints/UserGuide/EventDispatcher/index.html
UMGのブループリント内にイベントディスパッチャーを作成しておき、各アニメーションのFinishedイベントの際に呼び出しを行います。

イベントディスパッチャーへの割当は、UMGウィジェットを作成した側で行います。

おわり

以上でフェード機能が作成できました。
ゲーム中どこでも実行したい場合はGameModeBaseブループリントでCreateWidgetを行いインスタンスを保持しておくのがいいかもしれません。

Discussion