［UE5］特定の範囲に入ったら、強制的に後ろに移動させる

# 概要
この記事では、Unreal Engine 5 で、下の動画のような特定の範囲に入ったら少し止まり、後ろに強制的に移動させるものを作ります。
ゲームなどでよくある「ここから先は行けないよ」的なものです。

<iframe width="640" height="360" src="https://www.youtube.com/embed/nt4eT65IC2g" title="force go back 1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>


# この記事の主な対象者
- Blueprint（BP）の作り方の基礎を習得されている、初心者の方


# 1. 作るものの仕組み

特定の範囲に入ったら少し止まり、後ろに強制的に移動させるものを作っていくにあたって、最初に、作るものの仕組みをお話しします。<br><br>

下図のように、Playerが範囲2に向かって動いているとします。

![firstexp1_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/8ad50b50-ce32-ffbe-c2d6-46cd76a54084.jpeg)<br><br>

このPlayerが範囲2に向かって進んでいき、範囲2に入ります。

![firstexp2_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/ee1895c8-fc67-78c7-d6aa-322ee0474c87.jpeg)<br><br>

上図のようにPlayerが範囲2に入ったら、下図のようにPlayerを範囲1の外まで移動させるというものが、今回の記事で作成するものです。

![firstexp3_2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/67ec376c-c618-0aa3-d92b-a8ff3a26dc28.jpeg)


# 2. 特定の範囲に入ったら強制的に後ろに移動させる範囲のBPを作成する

最初に、下図のようなコンポーネントの構成のBPを作成します。

![components.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/5d7368c5-8bf1-93d1-6d65-1346bb9f820d.jpeg)

|コンポーネント名|コンポーネントの種類|備考|
|:-:|:-:|:--|
| DefaultSceneRoot | Scene | このコンポーネントを一番上の親にします。 |
| OutBox | Box Collision | 上の説明の「範囲1」に該当します。 |
| Arrow | Arrow | プレイヤーを強制移動させる方向です。このコンポーネント自体に特に意味はないのですが、マップにこのアクタを配置するとき、強制移動させる方向が確認しやすくなります。 |
| ForceStopBox | Box Collision | 上の説明の「範囲2」に該当します。 |

上図のコンポーネントを作り終わったら、「ForceStopBox」コンポーネントのX軸方向のスケールを小さくします。（今回の記事では、X軸方向のスケールを0.2にします。）

![scale.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/d70ebd37-e120-4fb6-2b4d-635460cf8668.jpeg)


次に、下図のように「ForceStopBox」コンポーネントの端が、「Arrow」コンポーネントの矢印と逆方向の、「OutBox」コンポーネントの端の方にくっつくように、「ForceStopBox」コンポーネントを移動させます。

![adust_forcestopboxpos.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/d38922cf-bf24-ee8e-46a4-3a72d30509b4.jpeg)


# 3. 特定の範囲に入ったら少し止まり、後ろに強制的に移動させる

上で作成したBPのイベントグラフに、「範囲2に入ったら少し止まり、範囲1の外まで強制的に移動させる」処理を実装していきます。<br><br>

最初に、「範囲2に入ったときに呼び出されるイベントノード」をイベントグラフに追加します。

BPのコンポーネント一覧から、「範囲2」に該当する「ForceStopBox」コンポーネントを選択して詳細パネルを開き、詳細パネルの「イベント」＞「OnComponentEndOverlap」の＋ボタン（下図の赤丸）をクリックします。

![add_begin_overlap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/eaf94d4f-3abc-0a6d-113a-e3c3873b9b7f.jpeg)

下図のノードがイベントグラフに追加されたことを確認します。

![oncomponentbeginoverlap_node.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/4934a6ca-25ba-e0dd-fd39-6e5a645b4b38.jpeg)

上図のノードが、「範囲2に入ったときに呼び出されるイベントノード」に該当します。<br><br>


同様にして、「範囲1の外に出たときに呼び出されるイベントノード」をイベントグラフに追加します。

BPのコンポーネント一覧から、「範囲2」に該当する「ForceStopBox」コンポーネントを選択して詳細パネルを開き、詳細パネルの「イベント」＞「OnComponentBeginOverlap」の＋ボタン（下図の緑丸）をクリックします。

![add_end_overlap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/04ccfc7d-51a8-3ac8-ced0-f96b71ba25f4.jpeg)

下図のノードがイベントグラフに追加されたことを確認します。

![oncomponentendoverlap_node.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/74965052-282e-59e8-9a8a-ee8b10f0ecf7.jpeg)

上図のノードが、「範囲1の外に出たときに呼び出されるイベントノード」に該当します。<br><br>


次に、下図のノードを組みます。下図のノードは、プレイヤーが範囲2に入ったときに、プレイヤーを少しの間止めたのちに、プレイヤーを強制移動させ始めるようにしています。下図のノードの中にある「ForceMove」というbool型の変数がtrueとなっているときに、プレイヤーを強制移動させます。
(※「Cast To BP_ThirdPersonCharacter」ノードのところは、「Cast To [プレイヤーのBP名]」のノードを使用します。今回の記事では、「BP_ThirdPersonCharacter」というBP名のアクタを、プレイヤーとして用いています。)

![oncomponentbeginoverlap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/095ecef4-747b-52ff-fb2d-d1841db52ce7.jpeg)<br><br>


次に、下図のノードを組みます。下図のノードは、プレイヤーを強制移動させるかどうかの変数「ForceMove」がtrueのとき、プレイヤーを矢印の向きに移動させるようにしています。

![tick.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/01527d30-6e40-e144-2fdb-007a9d6c02f4.jpeg)<br><br>


最後に、下図のノードを組みます。下図のノードは、プレイヤーが範囲1を出たら、プレイヤーの強制移動を止め、少しだけ動けなくした後、プレイヤーの操作ができるようにしています。
(※「Cast To BP_ThirdPersonCharacter」ノードのところは、「Cast To [プレイヤーのBP名]」のノードを使用します。)

![oncomponentendoverlap.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/0a06a065-e930-db81-fbb8-8f1df170ddd8.jpeg)<br><br>


ノードが組み終わったら、マップに配置します。マップに配置する際は、「Arrow」コンポーネントの矢印の向きにプレイヤーが戻ることに注意して配置します。また、配置する場所のサイズに合わせたスケールに変更して配置します。

![place_actor.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/39584151-5571-469b-f1c0-317af5d19d5e.jpeg)<br><br>


マップに配置したら、ゲームをプレイし、下の動画のように動くか確認します。

<iframe width="640" height="360" src="https://www.youtube.com/embed/nt4eT65IC2g" title="force go back 1" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>
<br><br><br>




以上で今回の記事の内容は終了です。
最後まで読んでいただき、ありがとうございました。