스토리텔링 개발자

[UE4] 트레이스(Trace) 본문

개발/언리얼 엔진

[UE4] 트레이스(Trace)

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

트레이스

예를 들어 캐릭터 정면에 위치한 오브젝트를 감지해야 한다고 칩시다.

어떤 방식으로 감지해야 할까요.

 

일직선을 체크해보면 될 것 같긴 한데.

어떤 방식으로 해야 할까요?

 

네. 바로 트레이스죠.

 

트레이스란 특정 점을 기준으로 일직선으로 광선을 쏴서 오브젝트를 검출하는 기능입니다.

유니티에서는 Raycast라는 이름으로 부릅니다.

 

 

 

사용

그렇다면 어떻게 트레이스를 사용할 수 있을까요.

 

언리얼에는 이를 쉽게 사용할 수 있도록 다양한 종류의 함수가 준비되어 있습니다.

일반적으로는 UWorld 객체의 LineTrace 함수 세트들을 사용하면 됩니다.

이름대로 일직선상을 트레이스하는 기능입니다.

UWorld::LineTraceSingleByChannel()
UWorld::LineTraceMultiByChannel()

UWorld::LineTraceSingleByObjectType()
UWorld::LineTraceMultiByObjectType()

....

 

싱글 / 멀티 히트 반환

 

라인 트레이스는 두 가지 종류가 있습니다.

각각 Single과 Multi 인데요.

정리하면 아래와 같습니다.

 

Single : 트레이스에 가장 먼저 검출(블록)된 것만 반환합니다.

Multi : 트레이스에 검출(블록)된 모든 것을 반환합니다.

 

위에서 아래로 LineTrace를 시도했을 시, 왼쪽이 싱글, 오른쪽이 멀티 트레이스

 

트레이스의 채널

 

각 트레이스에는 채널을 설정할 수 있습니다.

채널은 콜리전과도 연관이 있는데요.

자세한 채널 설정 방법은 아래 콜리전 포스팅을 참고해 주세요.

[UE4] 콜리전

 

축약하자면 해당 채널에 대한 반응을 각 오브젝트가 설정할 수 있는데,

그 반응이 블록(block)일 때에만 검출하겠다는 의미입니다.

[트레이스 유형] 란이 트레이스 채널에 대한 정의.

 

 

사용 시엔 트레이스 채널로 반응을 확인할 것인지, 오브젝트 타입(오브젝트 채널)으로 반응을 확인할 것인지 선택할 수 있다.

 

ByChannel : Trace Channel로 검출을 시도합니다.

ForObject : Object Channel로 검출을 시도합니다.

 

각각 좌측은 Trace Channel, 우측은 Object Types를 설정하여 트레이스 콜리전 채널 설정을 할 수 있습니다.

 

 

 

트레이스의 결과

 

트레이스로 검출이 성공했을 시에는 다음과 같은 값들이 출력됩니다.

 

Blocking Hit 콜리전 체크가 블록(block)했는지(오브젝트가 검출되었는지) 여부입니다.
Initial Overlap 초기 겹침 - 일련의 결과 중 첫 번째 오버랩인지 입니다.
Time 시간 - 트레이스 방향 상의 임팩트 시간으로, [0.0 에서 1.0 까지] 범위입니다. 히트가 없는 경우 1.0 을 반환합니다.
Location 위치 - 트레이스 셰이프에 따라 변경된 히트의 월드 스페이스 위치입니다.
Impact Point 임팩트 지점 - 히트 절대 위치입니다. 트레이스 셰이프는 포함하지 않으며, 히트 지점만입니다.
Normal 노멀 - 트레이스 방향입니다.
Impact Normal 임팩트 노멀 - 히트 표면 노멀(법선 벡터)입니다.
Phys Mat 피지컬 머티리얼 - 히트 표면의 피지컬 머티리얼 입니다.
Hit Actor 히트 액터 - 히트 액터 입니다.
Hit Component 히트 컴포넌트 - 특정 히트 컴포넌트 입니다.
Hit Bone Name 히트 본 이름 - 스켈레탈 메시 에 대해 트레이스를 한 경우 히트한 본 이름입니다.
Hit Item 히트 아이템 - 프리미티브의 어느 아이템에 히트했는지 기록하는 프리미티브 전용 데이터입니다.
Face Index 면 인덱스 - 트라이메시 또는 랜드스케이프와 충돌하는 경우, 히트한 면 인덱스입니다.
Trace Start 트레이스 시작 - 트레이스 시작 위치입니다.
Trace End 트레이스 끝 - 트레이스 끝 위치입니다.

 

 

Shape Trace

 

Line Trace로 충분한 범위를 커버할 수 없는 경우 Shape Trace를 사용하여 좀 더 넓은 범위를 감지할 수 있습니다.

라인 트레이스와 비슷한 감으로 사용할 수 있습니다만, 각 도형의 형태에 따라 추가적인 정보를 입력해 주어야 합니다.

 

종류는 아래와 같습니다.

 

1. Box Trace(박스형)

2. Capsule Trace(캡슐형)

3. Sphere Trace(구형)

 

각종 셰이프 트레이스
각 셰이프 트레이스별 함수

 

728x90
Comments