KimMK

Unreal Collision 본문

카테고리 없음

Unreal Collision

KimMK 2023. 9. 7. 18:29

액터간의 충돌을 발생시키기 위해서는 충돌 영역을 지정해줘야 합니다.

그 충돌 영역을 "콜리전"이라고 합니다.

 

메시 형태 그대로를 충돌 영역으로 잡을 수 있지만, 이렇게 하면 CPU의 과부하가 발생할 가능성이 커집니다.

따라서, Unreal에서는 단순 콜리전 영역으로 Box, Sphere, Capsule 형태의 기본 콜리전 컴포넌트를 제공합니다.

 

 

Unreal 에디터에서 프로젝트 세팅 >> 콜리전 탭으로 가면 두 가지의 콜리전 채널을 볼 수 있는데

Object 채널은 Collision 간에 충돌을 체크할 때 사용하고 (액터간의 충돌을 확인할 때),

Trace 채널은 Unreal에서 제공하는 LineTrace와 같은 Ray Tracing 기능을 이용할 때 사용합니다.

 

1. Object 채널

두 충돌체끼리 충돌했을 때, 정해진 충돌 반응을 하는데 이를 Response라고 합니다.

Response에는 3가지 종류가 존재합니다.

Ignore 충돌 이벤트를 무시함
Overlap 충돌했다는 이벤트는 발생시키지만, 물리적으로 밀어내지 않음
Block 충돌했다는 이벤트를 발생시키며 물리적으로 밀어냄

 

Response별 충돌 결과
Ignore VS Ignore = Ignore
Ignore VS Overlap = Ignore
Ignore VS Block = Ignore
Overlap VS Overlap = Overlap
Overlap VS Block = Overlap
Block VS Block = Block

 

두 충돌체 간에 Overlap 이벤트를 발생시키려면, 콜리전 컴포넌트디테일 패널에서 Generate Overlap Events가 True로 체크되어 있어야 합니다.

Collision 설정에는 Collision Enabled 항목이 있는데, 이 옵션은 충돌 감지나 물리 작용 기능을 On/Off 할 때 사용합니다.

No Collision 충돌 감지 기능과 물리 기능을 모두 사용하지 않는 상태
Query Only 충돌 감지 기능(Overlap)만 사용하는 상태
Physics Only 물리 작용 기능(Physics)만 사용하는 상태
Collision Enabled 모두 사용하는 상태

 

콜리전 프리셋은 사용자가 설정한 내용을 저장해놓고 필요할 때 가져올 수 있습니다.

예를 들어, 플레이어와 적 케릭터 간의 충돌체는 서로에 대한 충돌을 Overlap까지만 갖고 다른 액터와는 무시를 싶을 때, 콜리전 프리셋에서 아래와 같이 설정할 수 있습니다.

 

 

오브젝트 타입을 커스텀해서 만들면,

프로젝트 폴더의 Config폴더에서 DefaultEngine.ini 파일에 순서대로 저장됩니다.

config 폴더 안의 DefaultEngine.ini 파일에 저장된 Object 채널

이를 C++에서 불러오려면 위의 ECC_GameTraceChannel 번호에 맞게 불러서 사용하시면 됩니다.

예를 들어서 콜리전 컴포넌트에 "Player" 오브젝트 채널을 주고 싶다면,

이와 같이 세팅해주시면 됩니다.

하지만, 이와 같이 세팅하면 다른 오브젝트 채널과 개별적으로 설정해줘야 하기 때문에 보통 Preset을 세팅하고 이를 바인딩하는 것이 일반적입니다.

따라서, SetCollisionProfileName 함수를 이용해 프리셋을 설정해줍니다.