前編では、ワープ装置を作成し、一方通行のワープには成功したのですが、相互ワープできるワープ装置を作成すると無限ループになり、エラーとなりました。
後編では、相互ワープできるワープ装置を作成していきたいと思います。
初めての方に
アンリアルエンジンの記事では、初心者がアンリアルエンジンの勉強をのんびりしていき、最終的にはゲームを完成させる目的で、記事をあげていっています。紹介する手法が必ずしも最適な方法とは限りませんので、ご了承ください。
また、ゲーム完成まで温かく見守っていただけると幸いです。
ワープ装置の仕様を考える
まず、無限ループになる原因ですが、
ワープ装置に入った時、「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にし、ワープから離れるまでは、次のワープを行わない仕組みを考えました。
- ワープに入る(Begin Overlap)
- ThirdParsonCharactorのWarpFlagを取得する
- Falseの場合、WarpFlagをTrueにし、SetActorLoctionで目的地にワープする
- ワープから出る(End Overlap)
- 0.5秒の待ち時間を入れる
- WarpFlagをFalseにする
移動先のBegin Overlapと移動元のEnd Overlapが同時に動くので、End Overlap側の開始時にディレイを入れています。
これにより、明確にどちらが先に動くか決まります。
これがない場合、先にEnd Overlapの処理が動いた場合、WarpFlagがFalseとなり、移動先のBegin OverlapのSetActorLocationが動いてしまいます。
ThirdPersonCharactorの変数を取得している関係上、ごちゃごちゃしてるように見えますが、処理はそれほど複雑ではありません。
まとめ
今回作成したブループリントは、プロパティで移動先を指定できるので、何個でも設置しても問題ありません。
移動が瞬間ワープなので、エフェクトをつけたりしてみたいですね。