Collision컴포넌트에는 Overlap 이벤트와 Hit 이벤트가 존재한다.
Overlap이벤트는 Collision 컴포넌트의 영역과 다른 액터의 영역이 겹쳐졌을 때 발생한다.
Hit 이벤트는 Collision 컴포넌트의 영역과 다른 액터의 영역이 닿았을 때 발생한다.

Collision Preset은 Collision을 어떻게 설정해둘 것인지 정하는 것이다.

Collision Preset의 항목을 보면 여러개의 프리셋이 존재한다.
Collision Preset에서 많이 쓰이는 것들
NoCollision : 충돌을 전혀 감지하지 않는다. (구름, 장식용, 상호작용하지 않는 액터들)
BlockAll : 모든 객체들을 통과시키지 않는다.
OverlapAll : 모든 객체들을 통과시킨다. (주로 이벤트 트리거 용으로 많이 사용한다.)
BlockAllDynamic : 움직이는 객체만 통과시키지 않는다. (움직이는 객체 즉 플레이어와만 상호작용하고 싶을 때 사용한다.)
OverlapAllDynamic : 움직이는 객체만 오버랩 이벤트를 작동시킨다.(움직이는 객체 즉 플레이어와만 상호작용하고 싶을 때 사용한다.)
Pawn : 플레이어와 같은 폰 타입 객체를 대상으로 충돌을 감지하거나 막는다.

Collision Preset을 Custom으로 설정하면 아래에서 Collision Enabled를 설정할 수 있다.
Query and Physics : 충돌도 감지하고 물리적 반응도 활성화하겠다.
Query Only : 충돌만 감지하고 그 외의 물리적 반응은 하지 않는다.
Physics Only : 물리적 반응은 하지만 충돌은 감지하지 않는다.
이벤트 바인딩은 게임 런타임 상에서 일어나게 된다.
게임 실행 중에 플레이어가 새로운 오브젝트와 충돌하는 것과 같은 예측 불가능한 상황들에 대비해서 이벤트가 일어났을 때 그 상황에 맞는 함수들을 동적으로 연결시켜주기 위해서 이벤트 바인딩을 해준다.
Collision->OnComponentBeginOverlap.AddDynamic(this, %AActor::BindingFunction);
이벤트 바인딩 함수는 위와 같은 형식으로 이루어져 있다.
이벤트 바인딩 함수는 특정 이벤트가 일어났을 때 실행할 함수를 지정해주면서 매개변수들을 바인딩할 함수에 전달해준다.
그래서 BindingFunction(바인딩이 될 함수)의 시그니처를 바인딩 함수의 시그니처와 동일하게 맞춰주어야 한다.
virtual void BindingFunction(
UPrimitiveComponent* ThisComp,
AActor* OtherActor,
UPrimitiveComponent* OtherComp,
int32 OtherBodyIndex,
bool bFromSweep,
const FHitResult& SweepResult) override;
UPrimitiveComponent* ThisComp : 이벤트가 발생한 컴포넌트
AActor* OtherActor : this와 부딪힌 상대방 액터
UPrimitiveComponent* OtherComp : OtherActor에서 이벤트를 발생시킨 컴포넌트(캡슐 컴포넌트가 될 확률이 높음)
태그는 일종의 닉네임으로 액터들을 식별할 때 사용한다.

액터의 디테일 창에서 Actor항목에서 Tag를 설정할 수 있다.
액터와 액터가 부딪히는 Hit나 Overlap이벤트를 이번에 처음 배워봤는데 내가 했던 게임들에선 되게 사소하게 느껴지는 시스템인데 생각보다 많은 과정을 거친 끝에 탄생하는 이벤트라는 걸 느꼈다.