【UnrealEngine】C++でOverlapイベントを作成しよう!
ゲーム制作をしていると何かにものが重なったときにイベントを発生させたいなんてことがとても多くありますよね!
そこで使用するのがOvelap系のイベントになるかと思います。ブループリントのイベントグラフではノードをぽいっ!とおくだけで実装できますがC++ではコードを書く必要があるので、今回はそちらを備忘録として書いていこうと思います。
まずは重なった時にイベントを発生できるようにしていきましょう。
対象のアクタのC++を開いてヘッダーファイルに2つコードを追加します。

Class USphereComponent;
UPROPERTY(VisibleAnywhere)
USphereComponent* SphereCollision
ヘッダーファイルに書き込みができたらソースファイルに移動して、コリジョンコンポーネントを設定していきましょう。

こちらのコードはデフォルトで作成されているコードの上に記述しないようにしましょう。
#include "Components/SphereComponent.h"
またTickは今回falseに変更しています。
SphereCollision =
CreateDefaultSubobject<USphereComponent>(
TEXT("SphereCollision")
);
RootComponent = SphereCollision;
SphereCollision->SetSphereRadius(200.f);
SphereCollision->SetGenerateOverlapEvents(true);
ここまでできたらひとまず、アクタのルートにコリジョンが追加されているはずです。大きさはRadiusの値を変えたら変更できるので、好みで設定してみるのもいいですね!
次は重なったときにイベントを通知する処理を記述していきましょう。
ヘッダーファイルに移動して関数を宣言します。

少し引数が長いですが、頑張って記述しましょう。
UFUNCTION()
void OnOverlapBegin(
UPrimitiveComponent* OverlappedComponent,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult& SweepResult
);
頑張って記述ができたらソースファイルに移動して処理を記述します。特段何かやりたいことがあったわけではなかったので、毎度のことながら通知がきたら画面にデバッグを表示する処理にしてみました。(単純にPrintStringですね。)

こちらはソースファイルで作成したものと同様の引数を必ず宣言する必要があるので、ソースファイルでコピーしたものを貼るとミスがなくてよいですね。
void AVillagers::OnOverlapBegin(
UPrimitiveComponent* OvelappedComponent,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult& SweepResult
)
{
GEngine->AddOnScreenDebugMessage(
-1,
5,
FColor::Yellow,
TEXT("Overlap")
);
}
そしたら重なったときに関数を読んでくれるように上のほうでコードを記述しましょう。
ここまでできたら重なった時に画面上に文字が表示されるはずです。

次は重なりが終わったとき(End)ですが同じ手順で実装することができますので追加してみてください。参考までに画像は下記に貼っております。
また手順は同じですがOnOverlapとEndOverlapは持てる情報が違うため、一部引数が異なることに注意が必要かなと思います。



ということで今回は以上となります!
本日もお疲れさまでした。
またお会いしましょう!!!
YouTubeチャンネルもやってます
