LineTraceMultiByChannel의 정의
UE 공식문서의 LineTraceMultiByChannel 설명은 다음과 같다. 파파고를 통해 번역해 보았다.
LineTraceMultiByChannel은 특정 채널을 사용하여 광선을 전 세계에 추적하여 중첩된 히트를 반환한 다음 첫 번째 블로킹 히트를 반환합니다. 결과가 정렬되므로 블로킹 히트(발견된 경우)가 배열의 마지막 요소가 됩니다. 가장 가까운 단일 블로킹 결과만 생성되며 그 이후에는 테스트가 수행되지 않습니다.
여기서 나는 LineTraceMultiByChannel은 Multi 함수인데 "가장 가까운 단일 블로킹 결과만 생성된다."라는 구문이 이해가 되지 않아서 찾아보았다.
실제 LineTraceMultiByChannel의 간단한 정의는 아래와 같다.
주어진 시작점과 종료점 사이에 있는 모든 오브젝트를 검출하는 레이캐스트(raycast)를 수행합니다. 이 함수는 특정 충돌 채널(Collision Channel)을 기준으로 레이캐스트를 실행하고, 해당 경로에 있는 모든 오브젝트와의 충돌을 감지합니다.
논리적으로 잘못된 것이 없어 보여 단일 블로킹이라는 생소한 단어에 핵심이 있을 거라 생각해서 찾아보니 아래와 같은 구문을 얻을 수 있었다.
레이가 충돌한 모든 오브젝트들 중에서, 차단 충돌(레이의 경로를 막는 첫 번째 충돌)은 반환되는 배열의 마지막 요소로 기록된다는 것을 의미합니다. 즉, 배열은 레이가 만나는 여러 충돌 중 겹치는 충돌(overlapping hits)들을 먼저 나열하고, 마지막에 차단 충돌을 위치시킵니다.
구문을 해석하면, LineTraceMultiByChannel에서 강체를 가지지 않는 오브젝트들은 겹치는 충돌(Overlapping Hit)을 통해서 OutHits 배열에 포함하고, 강체를 가진 블로킹 객체는 차단 충돌(Blocking Hit)을 통해 더이상 진행할 수 없음과 동시에 OutHits 배열에 마지막 요소가 된다.
아래는 겹치는 충돌과 차단 충돌에 대한 설명이다.
1. 겹치는 충돌(Overlapping Hit)
- 겹치는 충돌은 레이가 오브젝트와 만나긴 하지만, 그 오브젝트가 레이의 경로를 차단하지 않을 때 발생합니다.
- 이런 종류의 충돌은 특히 오브젝트가 물리적으로 레이를 차단하지 않는 경우(예: 트리거 영역이나 반투명 오브젝트)에 감지됩니다.
- 겹치는 충돌은 주로 영역 내 진입, 영역 감지, 비-차단 상호작용에 사용됩니다.
2. 차단 충돌(Blocking Hit)
- 차단 충돌은 레이가 오브젝트와 만났을 때 그 오브젝트가 레이의 경로를 완전히 차단하는 경우에 발생합니다.
- 이는 레이의 진행을 막는 물리적 장애물에 의해 발생하며, 이를 통해 레이가 그 오브젝트에 의해 멈춰진 것을 알 수 있습니다.
- 차단 충돌은 주로 시각적 충돌, 물리적 상호작용, 총알이 벽에 부딪히는 것과 같은 시나리오에 사용됩니다.
예를 들어, 레이캐스트를 사용해 캐릭터 앞에 있는 모든 오브젝트를 감지하고자 할 때, 겹치는 충돌은 투명한 유리창이나 트리거 영역과 같은 오브젝트를 포함할 수 있으며, 차단 충돌은 벽이나 문과 같이 물리적으로 레이를 멈추게 하는 오브젝트에 의해 발생합니다. `LineTraceMultiByChannel` 함수는 이러한 모든 충돌을 감지하고 반환하는 반면, `LineTraceSingleByChannel` 함수는 첫 번째 차단 충돌만을 감지하고 반환합니다.
따라서 LineTraceSingleByChannel은 강체가 없는 UObject의 충돌을 고려하지 않고 차단 충돌이 일어나는 객체와의 정보만을 파악하고, LineTraceMultiByChannel은 차단 충돌이 일어나기 전까지 경로상의 모든 UObject들과의 FHitResult와 차단 충돌이 일어나는 객체의 정보를 저장함을 알게되었다.
'Unreal 공부 > UE5 GameDev' 카테고리의 다른 글
[UE5] ToonTank (1) (0) | 2023.11.17 |
---|---|
[UE5][개념편] ToonTank (0) | 2023.11.17 |
[UE5] Crypt Raider (2) (0) | 2023.11.13 |
[UE5] Crypt Raider (1) (0) | 2023.11.11 |
HitResult.Location 과 HitResult.ImpactPoint의 차이 (0) | 2023.11.11 |