[UE5]Unreal Engineでは「Hit」と「Overlap」は別物だったという話

# 概要
この記事では、Unreal Engine 5で、どのようにしたら「Hit」イベントと「Overlap」イベントが呼ばれるかをご説明いたします。


# この記事の主な対象者
- Unreal Engine の初心者の方


# 「Hit」と「Overlap」は別物だった

Unreal Engine には、アクタが何かに当たった瞬間に呼ばれる「OnActorHit」イベントや、アクタが何かに重なり始めた瞬間に呼ばれる「OnActorBeginOverlap」があります。

「Hit」の英語の意味は「（何かに）当たる」とかで、「Overlap」の英語の意味は「（何かに）重なる」でした。
なので、筆者は「「Hit」は重なり始める最初のときとも言えるから、「Hit」は「Overlap」の一部であり、「OnActorHit」と「OnActorBeginOverlap」は同時に呼ばれるのだろう」と最初は思っていました。

![relationship_between_hit_and_overlap_minee.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/e163f732-a4a5-74ff-8713-04a197c7eea0.jpeg)

そのことを確認するために、実際にプレイヤーキャラクターに、Hitしたときに呼ばれる「OnActorHit」イベントと、Overlapが始まったときに呼ばれる「OnActorBeginOverlap」イベントに、呼ばれたらメッセージを表示する処理を書きました。

実行してみると、下の動画のようになりました。

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

………あれっ？「OnActorHit」イベントしか呼ばれていないぞ。なんで？

![only_hitevent_was_called.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/14c32e45-0e1b-18cd-cdca-792081b5527c.jpeg)


筆者は勘違いしていました。実際には、Unreal Engineでの「Hit」と「Overlap」の関係性は、下図のような関係だったのです。

![relationship_between_hit_and_overlap_unreal.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/1de78192-6603-bb86-087a-fafae7d2c2ca.jpeg)

では、どのようにしたら「Hit」イベントが呼ばれ、どのようにしたら「Overlap」イベントが呼ばれるのかを、これからお話していきたいと思います。


# アクタ間の当たり判定の設定

「Hit」イベントや「Overlap」イベントが呼ばれるかどうかというのは、アクタが保持するコンポーネントの当たり判定設定によって変わります。

当たり判定設定は、コンポーネントの詳細パネルから見ることができます。

今回の記事では、上の動画のように、プレイヤーの保持する「Capsule Collision」コンポーネントと、オレンジ色のブロックが保持する「Static Mesh」コンポーネントが当たることについて考えます。<br><br>


まずは、プレイヤーのBPを開き、プレイヤーの保持する「Capsule Collision」コンポーネントの詳細パネルを開きます。

プレイヤーの詳細パネルの「コリジョン」＞「コリジョンプリセット」のところを見ると下図のようになっています。

![capsulecollision_setting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/971a89f1-de7c-79cc-2e8f-a9db92157e50.jpeg)

上図の赤線で引いた「コリジョン」＞「コリジョンプリセット」＞「Object Type」のところを見ていただくと、そのコンポーネントの当たり判定の種類がわかります。

ここでは、プレイヤーの保持する「Capsule Collision」コンポーネントの当たり判定の種類が「Pawn」ということだけ覚えておきます。<br><br>


次は、プレイヤーが当たるオレンジ色のブロックが保持する「Static Mesh」コンポーネントの当たり判定の種類を見ていきます。

プレイヤーのBPと同様にして、オレンジのブロックのBPを開き、詳細パネルの「コリジョン」＞「コリジョンプリセット」＞「Object Type」を確認します。

![staticmesh_setting.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/52706a05-9b62-342b-dc7b-98be8a89a6ba.jpeg)

上図から、オレンジ色のブロックが保持する「Static Mesh」コンポーネントの当たり判定の種類は「WorldDynamic」ということがわかります。<br><br>


ここで、今まで見てきた2つのコリジョン設定を見比べます。

![collision_settings.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/ad1c2521-c070-5a02-b70b-6e2ef342fca3.jpeg)


「コリジョン」＞「コリジョンプリセット」＞「オブジェクト応答」のところを見ていただくと、そのコンポーネントが、各当たり判定の種類に対して、どのように当たるようにしているのかがわかるようになっています。

「どのように当たるか」というのは、「無視する」「オーバーラップ」「ブロック」の3種類があり、それぞれの挙動は下のようになっています。

| 当たり方の種類 | 挙動 |
|:-:|:--|
| 無視する | すり抜けて、「Hit」イベントも<br>「Overlap」イベントも発生しない |
| オーバーラップ | すり抜けて、「Overlap」イベントが発生する |
| ブロック | ぶつかって、「Hit」イベントが発生する |

上図から、プレイヤーの「Capsule Collision」コンポーネントは、オレンジ色のブロックの「Static Mesh」コンポーネントの当たり判定の種類「World Dyanamic」に対して「ブロック」という設定になっていることがわかります（緑線）。

また、オレンジ色のブロックの「Static Mesh」コンポーネントは、プレイヤーの「Capsule Collision」コンポーネントの当たり判定の種類「Pawn」に対して「ブロック」という設定になっていることがわかります（赤線）。

このような当たり判定の設定にあったため、上の動画では、「Hit」イベントである「OnActorHit」イベントのみが実行されるというような状態になっていました。


# 当たり判定の設定の注意点

当たり判定の設定は、**当たり合う2つのコンポーネントの当たり判定設定の関係性**が大切になります。

例えば、下図のように、プレイヤーの「Capsule Collision」コンポーネントの「Pawn」に対する当たり方の種類を「オーバーラップ」にし、オレンジ色のブロックの「Static Mesh」コンポーネントの「Pawn」に対する当たり方の種類を「ブロック」にします。

![collision_settings2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/0f65612e-424d-9fcb-08dc-f9ab1f63ffec.jpeg)


上図のようにすると、下の動画のように、プレイヤーの「Capsule Collision」コンポーネントと、オレンジ色のブロックの「Static Mesh」コンポーネントの当たり方の種類は「オーバーラップ」となり、「Overlap」イベントが呼ばれます。

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


つまり、「Hit」イベントを呼ばれるようにしたいならば、当たり合う2つのコンポーネントが、お互いに対する当たり方の種類を「ブロック」に設定する必要があります。<br><br>

当たり判定の関係性は下の表のようになっているので、注意しましょう。
（オレンジがコンポーネント1の当たり方の種類、青がコンポーネント2の当たり方の種類です。）

![relashionship_among_hittypes.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3628167/46d841cf-8559-f3ca-cb03-9c4302222644.jpeg)<br><br>


以上で、「Hit」と「Overlap」は別物だったという話は終わりです。
最後まで読んでいただき、ありがとうございました。