OnComponentHit : 블록 충돌이 발생할 때 호출되는 델리게이트OnComponentBeginOverlap : 오버랩 시작 시 호출되는 델리게이트OnComponentEndOverlap : 오버랩 끝날 때 호출되는 델리게이트블루프린트에서 이벤트 바인딩을 가능하게 해주는 매크로가 DYNAMIC이고,
MULTICAST는 여러 함수를 동시에 바인딩할 수 있다는 의미다.

mBody->OnComponentHit.AddDynamic(this, &APlatformItem::BoxHit);
mBody->OnComponentBeginOverlap.AddDynamic(this, &APlatformItem::BoxOverlap);
mBody->OnComponentEndOverlap.AddDynamic(this, &APlatformItem::BoxEndOverlap);

OnComponentHit를 타고 들어가면 내부가 Dynamic Multicast로 구현되어 있어 여러 함수를 동시에 바인딩할 수 있음을 알 수 있다.



UFUNCTION()
void BoxHit(UPrimitiveComponent* HitComponent, AActor* OtherActor,
UPrimitiveComponent* OtherComp, FVector NormalImpulse,
const FHitResult& Hit);
UFUNCTION()
void BoxOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex, bool bFromSweep,
const FHitResult& SweepResult);
UFUNCTION()
void BoxEndOverlap(UPrimitiveComponent* OverlappedComp, AActor* OtherActor,
UPrimitiveComponent* OtherComp, int32 OtherBodyIndex);





세 개의 함수(BoxHit, BoxOverlap, BoxEndOverlap)를 최종적으로 정의한다.

AddDynamic을 통해 이벤트 연결


아이템 프리셋에서 카메라 채널을 무시하면, 플레이어 시점에서 카메라가 튕기지 않고 자연스럽게 유지된다.

플레이어가 아이템과 블록되면 Hit가 발생한다.


아이템을 먹을 때마다 점수가 오르는 기능을 구현한다.
방법은 크게 두 가지:
APlatformGameState 클래스 생성 (GameStateBase 상속)PlatformGameMode.cpp에서 등록GameStateClass = APlatformGameState::StaticClass();




APlatformPlayerState 클래스 생성 (PlayerState 상속)PlatformGameMode.cpp에 등록


PlayerState는 플레이어 개별 점수 관리에 적합하다.
GameState는 게임 전체 아이템 수 관리에 적합하다.
아이템마다 점수를 다르게 줄 수 있도록 PlatformItem.h에 변수 선언.



컴파일 후 아이템 스코어를 에디터에서 직접 설정 가능하다.
DeleteItem() 실행



플레이어가 특정 지점에 닿으면 게임이 끝나는 기능 구현.
Kismet/KismetSystemLibrary.h 인클루드 후 QuitGame() 호출



플레이할 때 EndPoint 박스에 오버랩되면 게임이 종료된다.
OnComponentHit, OnComponentBeginOverlap, OnComponentEndOverlap → 충돌 이벤트 델리게이트AddDynamic으로 함수 바인딩