Gaming Life

一日24時間、ゲームは10時間

UE4 ちょっと見栄えのいいワープ機能を実装してみる

先日の第三回UE4GameJamに参加して以降、他の人の組んだBPを読み込んだり、いろんな機能を実験していたのだがその中で色々応用の効きそうなBPが実装できたので自分用のメモがてらブログにまとめる。

環境

使用ver: UE4 1.8.2

使用テンプレート: TwinStickShooter

ワープポイントのエフェクト

 今回は無料で手に入る「InfinityBladeEffect」内の「P_Summon_Portal」を利用。InfinityBladeEffectは実用的な上中身を見てるだけでCascadeの勉強になるので神。

ワープ機能を実装する

 これは ヒストリアさんのブログ が詳しいので参考にされたし。ただしこの記事では一つのActorを継承したBP「BP_WarpPoint」に「Box Collision」を二つ持たせて解決してるがこれでは使い勝手が悪いので、いわゆる「ダイレクトブループリント通信」を利用した。

 「BP_WarpPoint」型の変数を用意してDetailsから「Instance Editable」にチェックを入れる。これにより設置したレベル上でその変数の中身を変えることができる。 (ダイレクトBP通信については公式 がとても詳しいのでそちらを見るべき )

 レベル上にこの「BP_WarpPoint」を二つ設置し(それぞれ①、②とする)Details->Defaultから先程用意した「BP_WarpPoint」型の変数に①には②、②には①をセットする。これでヒストリアさんのブログで紹介されていたワープ機能と同等の機能が得られるはず。

ワープ中入力を受け取らないようにする&黒画面フェードアニメを実行する

 ワープ中に移動できるようにすると変なので

ワープポイントに入る ->移動を禁止 ->黒画面フェードアウト ->ワープ ->黒画面フェードイン ->移動禁止を解除する

という一連の機能を実装してみた。以下、順を追って説明する。

①移動を禁止する  いろいろな方法があるが今回は「SetActorTickEnabled」を利用した。このノードは「Enabled」がFalseの時入ってくる「Target」のEvent Tickが実行できないようにする。今回はこれで問題なく動くが、ワープ中もTickを実行したい場合はフラグを立てて分岐させれば良さそう。

②黒画面フェードアウト、フェードイン  これは alwaiさんのブログ が非常に詳しいです。ほぼこのサイトのままなのでフェードアウト、フェードインアニメーションの作成の仕方は省略。

 ブログの手順に従って作成したUMGアニメーション、「Fadeout」、「Fadein」を以下の関数で呼び出します。

f:id:ai_gaminglife:20171129022103p:plain f:id:ai_gaminglife:20171129022120p:plain

 最終的には以下のようになりました。

f:id:ai_gaminglife:20171129022131p:plain f:id:ai_gaminglife:20171129022135p:plain

 実際動かした動画。

まとめ

  • InfinityBladeEffectは神。
  • ほぼ独学でここまでやってきたけど3ヶ月も使ってると流石に慣れてきた。
  • 劇場版アニメゴジラ早く見たい

 最近はメトロイドライクなゲームの開発がストップしているので次回もTwinStickShooterテンプレートを改造するか、乱数について色々実験するかも。