스토리텔링 개발자

[UE4] 콜리전(Collision) 본문

개발/언리얼 엔진

[UE4] 콜리전(Collision)

김디트 2021. 6. 24. 17:36
728x90

개요

언리얼 엔진은 물리 엔진을 포함하고 있습니다.

즉, 오브젝트들끼리의 상호작용을 엔진 내에서 처리할 수 있습니다.

 

상호작용 중 가장 대표적인 것으로는 충돌을 꼽을 수 있을텐데요.

콜리전이란 바로 충돌을 처리하기 위한 기능입니다.

 

트레이스 또한 바로 그 충돌을 사용하여 연산합니다.

즉 내부적으로 콜리전 기능을 사용합니다.

 

 

 

콜리전 프리셋

콜리전은 각 오브젝트 혹은 트레이스 타입과의 상호 연관관계를 따져 충돌을 처리합니다.

 

엔진에서 오브젝트를 선택한 후 디테일 창을 확인하면 콜리전 프리셋이라는 란을 발견할 수 있는데요.

바로 이것이 그 상호 연관관계를 정의하는 부분입니다.

 

즉, 콜리전 프리셋이란 바로 해당 오브젝트가 다른 오브젝트, 트레이스와 어떤 상호작용을 할건지 선언한 것이라고 할 수 있습니다.

 

콜리전 프리셋(Collision Preset)

 

각 요소를 확인해 볼까요.

 

오브젝트 타입(Object Type) 

 

충돌 시 오브젝트를 대표하는 타입입니다.

사실 '오브젝트 채널'을 의미합니다.

오브젝트 채널 정의는 프로젝트 세팅 - 엔진 - 콜리전 에서 확인할 수 있습니다.

 

콜리전 반응(Collision Responses)

 

다른 타입(트레이스 채널, 오브젝트 채널)과 충돌 시 어떻게 동작할지를 정의한 부분입니다.

사실상 콜리전 프리셋의 핵심이라고 할 수 있죠.

 

트레이스 반응(Trace Response) 에서 트레이스와의 상호작용 처리를,

오브젝트 반응(Object Response) 에서 오브젝트와의 상호작용 처리를 정의합니다.

 

상호작용의 종류는 위의 스샷에서도 확인할 수 있듯이 3종이 존재하는데요.

그에 대한 내용은 아래에서 이어 하도록 하겠습니다.

 

 

 

 

상호 작용

콜리전은 충돌 시 상대 오브젝트에 대해 자신이 어떤 행동을 취할지에 따라 처리됩니다.

즉, 상대 오브젝트 별로 어떤 행동을 취할지를 정의해야 한다는 의미입니다.

 

충돌 시 취할 수 있는 행동은 세 종류가 있습니다.

 

그 세 종의 상호작용(반응, Responses)은 아래와 같습니다.

 

블록(Block)

 

두 오브젝트가 모두 '블록'으로 설정되어 있을 시 서로 겹치지 않고 막힙니다.

 

충돌 이벤트

1. 디테일 창의 콜리전에서 Simulation Generates Hit Events 설정이 활성화 되어 있다면

2. Event Hit 함수가 호출됩니다.

 

Event Hit 함수

 

겹침(Overlap)

 

'겹침' 설정이 되어있는 오브젝트는 다른 오브젝트와 충돌하지 않고 통과시킵니다.

액터를 Overlap (겹침)으로 설정하면 각 오브젝트는 서로 Ignore (무시)하는 것처럼 동작하는데요.

실제로 Generate Overlap Events 옵션을 활성화하지 않으면 기본적으로 동일하게 동작한다고 봐도 무방합니다.

 

충돌 이벤트

1. 두 오브젝트 모두 '무시' 이외의 것으로 설정되어 있고

2. Collision > Generate Overlap Events 설정이 활성화 되어 있다면

3. 겹침 이벤트가 호출됩니다. (허나 둘 중 하나는 겹침으로 설정되어 있어야 겹침 이벤트가 발생합니다.)

 

겹침 시작 이벤트
겹침 종료 이벤트

 

 

무시(Ignore)

 

모든 오브젝트를 통과시키며, 어떠한 이벤트도 발생시키지 않습니다.

충돌을 가하는 오브젝트가 무시가 아닌 다른 설정이라 하더라도 마찬가지입니다.

 

이를테면,

오브젝트A : 무시(Ignore)

오브젝트B : 겹침(Overlap), Generate Overlap Events 옵션 활성화

 

이 경우, 충돌 및 겹침이 이루어지더라도 오브젝트B의 겹침 이벤트는 발생하지 않습니다.

 

 

 

상호작용 설정 예제

 

구체와 벽이 충돌하도록 설정

 

구체 콜리전 구성 벽 콜리전 구성
- 오브젝트 타입 : PhysicsBody
- WorldDynamic 타입과의 상호 작용 : Block
-  Simulation Generates Hit Events : 활성화
- 오브젝트 타입 : WorldDynamic
- PhysicsBody 타입과의 상호 작용 : Block

 

이 경우 다음과 같이 동작합니다.

 

1. 서로의 타입에 대해 Block 설정이 되어 있으므로 충돌이 발생합니다.

2. Simulation Generates Hit Events가 활성화 되어 있으므로 구체의 Event Hit 함수가 호출됩니다.

 

 

커스텀 채널 및 콜리전 프리셋 정의

프로젝트 셋팅 > 엔진 > 콜리전 에서 커스텀 '오브젝트 채널', '트레이스 채널', '콜리전 프리셋'을 정의할 수 있습니다.

 

엔진 > 콜리전
채널 추가 시

새 채널을 추가할 때는 다른 채널과의 상호 작용 시 어떤 반응을 취할 지 여부를 결정할 수 있습니다.

딱히 다른 반응을 선택하지 않으면 이 '기본 반응'으로 기본 설정되도록 되어 있습니다.

물론 각 콜리전 프리셋에서 변경할 수 있겠죠.

 

오브젝트 채널(Object Channel)

 

오브젝트 콜리전의 타입으로 설정할 수 있는 채널입니다.

즉, 오브젝트 타입이라고 봐도 무방합니다.

 

트레이스 채널(Trace Channel)

 

트레이스의 타입으로 설정할 수 있는 채널입니다.

즉, 트래이스의 타입이라고 봐도 무방합니다.

 

콜리전 프리셋(Preset)

 

오브젝트 디테일의 콜리전 란에서 손쉽게 콜리전을 설정하기 위해 미리 정의해두는 프리셋입니다.

오브젝트 디테일 창에서 콜리전 프리셋을 Custom...으로 선택하면 유니크한 콜리전 프리셋을 즉각적으로 설정할 수도 있습니다만, 역시 자주 쓰는 설정은 저장해두는 것이 편리하겠죠.

 

프리셋 생성

728x90
Comments