환경 쿼리와 트레이싱 기본 활용
라인·박스·구·캡슐 트레이스로 시야·명중·상호작용 대상을 탐색하고 쿼리 결과를 디버깅합니다.
지난 절에서 On Hit, On Overlap 기반 상호작용을 익혔다면, 이제 충돌 이전 단계의 탐색으로 확장할 차례입니다.
실제 게임플레이에서는 오브젝트가 부딪히기 전에도 주변 상황을 알아야 합니다.
특정 영역에 무엇이 있는지, 전방 경로가 막혀 있는지 같은 정보를 미리 얻기 위해 쿼리(Query)와 트레이스(Trace)를 사용합니다.
이번 절에서는 환경 정보를 얻기 위한 환경 쿼리와 트레이싱(Tracing)의 기본 활용 흐름을 정리합니다.
환경 쿼리와 트레이싱이란 무엇인가?
환경 쿼리(Environment Query)는 특정 조건에 맞는 환경 정보를 질의하는 포괄적인 개념입니다.
8장에서 다룬 EQS (Environment Query System)는 후보를 생성하고 필터링·평가하는 시스템입니다. 여기서는 그와 구분하여 기본적인 충돌 쿼리인 Trace를 다룹니다.
트레이싱(Tracing)은 가상의 선(Line) 또는 형태(Shape)를 월드에 발사해 특정 콜리전(Collision) 오브젝트와 교차하는지 확인하는 메커니즘입니다.
물리 시뮬레이션 결과와 분리해 콜리전 메시 기준으로 빠르게 판정할 수 있기 때문에, 환경 정보를 정확하게 수집하는 데 매우 유용합니다.
환경 쿼리와 트레이싱이 필요한 이유- 시야/가시성 검사: AI가 플레이어를 볼 수 있는지, 플레이어가 엄폐물 뒤에 있는지 확인합니다.
- 장애물 검사: 선분이나 이동 형상을 가로막는 충돌이 있는지 확인합니다. NavMesh 경로의 도달 가능성은 별도의 경로 찾기 검사로 판단합니다.
- 공격/능력 범위 판정: 총알이나 스킬이 적에게 명중했는지, 범위 내에 적이 있는지 판정합니다.
- 상호작용 감지: 플레이어의 시선 앞에 상호작용 가능한 오브젝트(문, 스위치, 아이템)가 있는지 감지합니다.
- 배치 검사: 오브젝트를 배치할 때 다른 오브젝트와 겹치지 않는지 확인합니다.
AI가 위치를 선택하는 문제에서는 EQS와 Trace를 함께 쓰는 방식이 특히 유용합니다.
EQS에서 후보 위치의 시야·충돌 조건을 검사할 때 Trace를 활용할 수 있습니다. 후보까지 걸어서 갈 수 있는지는 Pathfinding 테스트 등과 구분합니다.
트레이싱의 종류와 활용
트레이싱은 발사하는 가상의 형태에 따라 여러 종류가 있습니다.
가장 흔하게 사용되는 트레이싱은 다음과 같습니다.
라인 트레이스 (Line Trace)
가장 기본적인 트레이싱으로, 한 지점에서 다른 지점까지 직선을 발사합니다.
-
블루프린트 노드
Line Trace By Channel: 특정 콜리전 채널을 사용하여 트레이스합니다.Line Trace For Objects: 지정한 충돌 Object Type만 대상으로 합니다. Blueprint 클래스 필터가 필요하면 반환된 Actor를 별도로 검사합니다.
-
주요 입력 핀
Start: 트레이스를 시작할 월드 위치 (Vector)End: 트레이스가 끝날 월드 위치 (Vector)Trace Channel/Object Types: 어떤 콜리전 채널/오브젝트 타입을 검사할지 지정합니다.Actors to Ignore: 트레이스에서 무시할 액터 배열 (예: 트레이스 발사 액터 자신)Draw Debug Type: 디버그 라인을 그릴지 여부 (None,For One Frame,For Duration)
-
주요 출력 핀 (
Out Hit구조체)Blocking Hit: 트레이스가 무엇인가에 의해 막혔는지 (Bool)Hit Actor: 충돌한 액터 (Actor Reference)Hit Component: 충돌한 컴포넌트 (Primitive Component Reference)Location: 충돌 시점의 트레이스 형상 위치입니다. Shape Trace에서는 형상의 중심 위치와 관계됩니다.Normal: 스윕 형상 쪽 충돌 법선입니다.Distance: 시작점부터 충돌 위치까지의 거리입니다.Impact Point/Impact Normal: 실제 표면의 접촉점과 법선입니다. 라인에서는 Location/Normal과 일치하지만 Shape Trace에서는 다를 수 있습니다.
-
총알 명중 판정
Start는 총구 위치,End는 총구 위치 +총구 방향 * 최대 사거리로 설정.Trace Channel은Visibility(가시성) 또는 커스텀Projectile채널.Hit Actor가 플레이어/적일 경우 데미지 적용.Hit Location에 총알 박히는 이펙트 생성.- 블루프린트 로직: 아래는 노드 연결의 의사 코드입니다.
Hit Location/Normal은 Break Hit Result에서 읽은 위치·법선을 뜻하고, 실제 Apply Damage의 대상 입력은Damaged Actor입니다. 멀티플레이의 최종 피해는 서버가 검증한 경로에서 적용합니다.(Shoot Event) -> Line Trace By Channel (Start: GetMuzzleLocation, End: MuzzleLocation + ForwardVector * 5000, Trace Channel: Visibility) -> Branch (Out Hit -> Blocking Hit) -> True: -> Break Hit Result (Get Hit Actor, Get Hit Location, Get Hit Normal) -> Spawn Emitter At Location (Location: Hit Location, Rotation: Make Rot From Z(Hit Normal)) -> Apply Damage (Target: Hit Actor, Damage Amount: 20)
-
AI 시야 검사
Start는 AI의 눈 위치,End는 플레이어 캐릭터의 위치.Trace Channel은Visibility.Actors to Ignore에 AI 자신을 추가.Blocking Hit가True이고Hit Actor가 플레이어가 아니라면 (즉, 중간에 장애물이 있다면) 플레이어를 볼 수 없음.
Box/Sphere/Capsule Trace
선형 트레이스 대신 특정 형태를 월드에 발사하여 콜리전을 감지합니다.
특정 범위 내의 오브젝트를 찾거나, 더 넓은 영역의 충돌을 검사할 때 유용합니다.
-
블루프린트 노드
-
Box Trace By Channel/Sphere Trace By Channel/Capsule Trace By Channel
-
-
주요 입력 핀
Start: 트레이스 시작 위치End: 트레이스 끝 위치Half Size(Box) /Radius(Sphere) /Radius,Half Height(Capsule): 트레이스 형태의 크기Orientation(Box): 박스 형상의 회전입니다. 기본 Blueprint Capsule Trace에는 이 회전 입력이 없습니다.- 나머지 핀은 라인 트레이스와 유사합니다.
-
주요 출력 핀
- 단일
Out Hit또는Multi버전의Out Hits입니다. Multi By Channel은 첫 Blocking Hit까지의 결과만 반환하며, Multi For Objects는 지정한 Object Type에 맞는 결과를 반환합니다.
- 단일
-
근접 공격 범위 판정
- 캐릭터 전방에
Sphere Trace또는Box Trace를 짧게 발사. - Pawn들을 대상으로 하려면
Sphere Trace For Objects등의Object Types에Pawn을 넣습니다. Pawn은 기본 Object Type이지 적만 의미하는 Trace Channel이 아닙니다. - Multi 결과에서 유효한 적을 판별하고 같은 Actor가 여러 컴포넌트로 검출되면 중복을 제거한 뒤 한 번씩 피해를 적용합니다.
- 캐릭터 전방에
-
환경 배치 검사
- 새 오브젝트를 배치하려는 위치에
Box Trace를 발사하여 기존 오브젝트와 겹치는지 확인. - 겹칠 경우 빨간색으로 표시하거나 배치 불가능 처리.
- 새 오브젝트를 배치하려는 위치에
트레이싱 디버깅
Draw Debug Type 핀을 For Duration 또는 For One Frame으로 설정하여 트레이스 라인이나 형태를 시각적으로 확인하는 것이 디버깅의 핵심입니다.
For One Frame: 호출한 쿼리를 한 프레임 동안 표시합니다. 이 옵션이 쿼리 자체를 매 프레임 실행하지는 않습니다.For Duration: 일정 시간 동안 트레이스를 그려서 지속적인 움직임에 따른 트레이스 변화를 확인합니다.
트레이싱 사용 시 고려사항
- 콜리전 설정의 중요성: 트레이싱은 액터의 콜리전 설정(
Object Type,Trace Responses)에 따라 결과가 달라집니다. 원하는 대로 작동하지 않는다면 액터의 콜리전 설정을 다시 확인해야 합니다. - 성능: 트레이싱은 비교적 저렴한 연산이지만, 너무 자주(예: 매 프레임, 많은 액터에서) 긴 거리를 트레이스하면 성능에 영향을 줄 수 있습니다. 필요한 경우에만 실행하고, 거리를 최소화하는 것이 좋습니다.
- 조회와 반응: Trace는 충돌 결과를 조회하며, 오브젝트를 튕기는 물리 반응을 수행하지 않습니다. 비용은 형상·거리·횟수·충돌 복잡도에 따라 측정합니다.
- 오너십 및 네트워크: 멀티플레이어 환경에서는 트레이스 로직을 주로 서버에서 실행하는 것이 안전합니다. 클라이언트에서 트레이스 결과에 따라 중요한 게임플레이 로직을 처리하면 클라이언트 조작의 여지가 생길 수 있습니다. (예: 총알 명중 판정은 반드시 서버에서!)
환경 쿼리와 트레이싱은 게임 세계의 정보를 얻고, AI의 의사결정, 플레이어의 상호작용, 전투 시스템 등 다양한 게임플레이 로직을 구현하는 데 필수적인 도구입니다.
콜리전 시스템과 함께 이들을 능숙하게 활용하는 것이 언리얼 엔진 개발의 핵심 역량 중 하나입니다.
이번 절에서는 라인 트레이스와 박스 트레이스처럼 환경 정보를 조회하는 트레이싱 기능의 기본 사용법과 디버깅 방법을 다뤘습니다.
트레이싱은 상호작용, 피격 판정, 시야 확인 같은 게임플레이 로직에서 자주 사용됩니다.