언리얼 C++ 25.02.07

HyeonjungYun·2025년 2월 7일

언리얼 기초

목록 보기
15/23

Collision 컴포넌트

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

Collision Preset


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에서 이벤트를 발생시킨 컴포넌트(캡슐 컴포넌트가 될 확률이 높음)

Tag

태그는 일종의 닉네임으로 액터들을 식별할 때 사용한다.

액터의 디테일 창에서 Actor항목에서 Tag를 설정할 수 있다.

공부를 한 소감과 느낀 점

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

profile
게임 프로그래머 공부

0개의 댓글