【UE4】Part16 ワープ装置を作成する 後編

前編では、ワープ装置を作成し、一方通行のワープには成功したのですが、相互ワープできるワープ装置を作成すると無限ループになり、エラーとなりました。

後編では、相互ワープできるワープ装置を作成していきたいと思います。

目次

初めての方に

アンリアルエンジンの記事では、初心者がアンリアルエンジンの勉強をのんびりしていき、最終的にはゲームを完成させる目的で、記事をあげていっています。紹介する手法が必ずしも最適な方法とは限りませんので、ご了承ください。

また、ゲーム完成まで温かく見守っていただけると幸いです。

ワープ装置の仕様を考える

まず、無限ループになる原因ですが、

ワープ装置に入った時、「On Component Begin Overlap」が発生して、目的地にワープするのですが、目的地のワープの「On Component Begin Overlap」が動いてしまい、元のワープ装置にワープし、元のワープ装置の「On Component Begin Overlap」が動いてしまい・・・という感じで、無限にワープし続けてしまうことです。

なので、一度ワープしたら、ワープ装置から出るまでは、次のワープを発生させないようにしたいと思います。

ワープ装置から出たというのは、「OnComponent End Overlap」イベントで取得します。

気を付けてもらいたいところは、最初のワープ装置に入り、「On Component Begin Overlap」で目的地のワープ装置に移動したあと、最初のワープ装置の「OnComponent End Overlap」が発生してしまうことです。

その辺を考慮して、ブループリントを修正してきたいと思います。

ブループリントを修正する

では、仕様に基づきブループリントを修正していきます。

私は、ThirdPersonCharactorにWarpFlagというフラグを持ち、一度ワープした時ONにし、ワープから離れるまでは、次のワープを行わない仕組みを考えました。

  1. ワープに入る(Begin Overlap)
  2. ThirdParsonCharactorのWarpFlagを取得する
  3. Falseの場合、WarpFlagをTrueにし、SetActorLoctionで目的地にワープする
  1. ワープから出る(End Overlap)
  2. 0.5秒の待ち時間を入れる
  3. WarpFlagをFalseにする

移動先のBegin Overlapと移動元のEnd Overlapが同時に動くので、End Overlap側の開始時にディレイを入れています。

これにより、明確にどちらが先に動くか決まります。

これがない場合、先にEnd Overlapの処理が動いた場合、WarpFlagがFalseとなり、移動先のBegin OverlapのSetActorLocationが動いてしまいます。

ThirdPersonCharactorの変数を取得している関係上、ごちゃごちゃしてるように見えますが、処理はそれほど複雑ではありません。

まとめ

今回作成したブループリントは、プロパティで移動先を指定できるので、何個でも設置しても問題ありません。

移動が瞬間ワープなので、エフェクトをつけたりしてみたいですね。

目次