icon

환경 쿼리와 트레이싱 기본 활용


 언리얼 엔진의 환경 쿼리와 트레이싱 기능은 게임 월드와 상호작용하고 정보를 수집하는 강력한 도구입니다.

 이 절에서는 블루프린트에서 이러한 기능을 활용하는 방법을 살펴보겠습니다.

라인 트레이스

 라인 트레이스는 시작점에서 끝점까지 직선을 그어 충돌을 감지하는 방법입니다.

[Line Trace By Channel]
Start: GetActorLocation()
End: Start + (GetActorForwardVector() * 1000)
Trace Channel: Visibility
    |
[Branch: Hit?]
    |
[Print String] <-- True
String: "Hit object: " + HitResult.GetActor().GetName()

 활용 사례 : 발사체 궤적, 시야 체크

스피어 트레이스

 스피어 트레이스는 구 형태로 충돌을 감지합니다.

[Sphere Trace By Channel]
Start: GetActorLocation()
End: Start + (GetActorForwardVector() * 500)
Radius: 50
Trace Channel: Visibility
    |
[ForEachLoop: Hit Results]
    |
[Apply Damage]

 활용 사례 : 범위 공격, 근접 적 감지

박스 트레이스

 박스 트레이스는 직육면체 형태로 충돌을 감지합니다.

[Box Trace By Channel]
Start: GetActorLocation()
End: Start + (GetActorForwardVector() * 300)
Half Size: (X=50, Y=50, Z=100)
Orientation: GetActorRotation()
Trace Channel: Visibility
    |
[Get Overlapping Actors]

 활용 사례 : 영역 효과, 트리거 영역 설정

오버랩 이벤트

 오버랩 이벤트를 사용하여 지속적인 충돌 감지를 할 수 있습니다.

[Event ActorBeginOverlap]
    |
[Cast To Character]
    |
[Branch: Success?]
    |
[Apply Effect] <-- True
 
[Event ActorEndOverlap]
    |
[Remove Effect]

히트 결과 해석 및 처리

 트레이스 결과로 얻은 정보를 활용하는 방법

[Line Trace By Channel]
    |
[Break Hit Result]
    |
[Get Impact Point]
[Get Hit Component]
[Get Hit Bone Name]
    |
[Apply Damage at Location]

트레이싱을 이용한 상호작용 구현

 예 : 시야 체크 시스템

[Line Trace By Channel]
Start: PlayerEyeLocation
End: TargetLocation
Trace Channel: Visibility
    |
[Branch: Blocked?]
    |
[Set Is Visible] <-- False
    |
[Set Is Visible] <-- True

환경 쿼리 시스템 (EQS) 기본

 EQS는 AI의 의사 결정을 위한 고급 쿼리 시스템입니다.

 1. EQS 쿼리 생성

  • 콘텐츠 브라우저에서 AI > Environment Query 선택

 2. 제너레이터 및 테스트 설정

 3. 블루프린트에서 EQS 쿼리 실행

[Run EQS Query]
Query Template: MyEQSQuery
Querier: Self
    |
[Get Query Results]
    |
[ForEachLoop]
    |
[Do Something with Result]

 활용 사례: 최적의 위치 찾기, 동적 커버 포인트 선정

성능 영향 및 최적화

 트레이싱과 쿼리는 성능에 영향을 줄 수 있으므로 최적화가 중요합니다.

 1. 트레이스 빈도 조절

  • 매 프레임 대신 일정 간격으로 수행

 2. 트레이스 복잡도 조절

  • 필요 이상의 복잡한 트레이스 피하기

 3. 채널 및 오브젝트 타입 최적화

  • 필요한 채널과 오브젝트만 대상으로 트레이스

 4. EQS 쿼리 최적화

  • 쿼리 아이템 수와 테스트 수 제한

 성능 최적화 예제

[Tick Event]
    |
[Branch: Time Since Last Trace > 0.5s?]
    |
[Perform Trace] <-- True
    |
[Set Last Trace Time]

고급 트레이싱 기법

 1. 멀티 트레이스

  • 여러 방향으로 동시에 트레이스 수행
[Multi Line Trace By Channel]
Start: GetActorLocation()
End: GenerateTraceEndPoints()
Trace Channel: Visibility
    |
[ForEachLoop: Hit Results]
    |
[Process Each Hit]

 2. 지속적인 트레이스

  • 움직이는 물체를 따라가는 트레이스
[Timeline]
    |
[Lerp]
Start: InitialPosition
End: TargetPosition
Alpha: Timeline_0_1
    |
[Line Trace By Channel]
Start: LerpResult
End: LerpResult + (DownVector * 100)

 3. 콤플렉스 트레이스

  • 정확한 메시 형태를 따라 트레이스
[Line Trace For Objects]
Object Types: WorldStatic, WorldDynamic
Start: TraceStart
End: TraceEnd
Trace Complex: True

EQS 고급 활용

 1. 커스텀 EQS 테스트 생성

  • 특정 게임플레이 요구사항에 맞는 테스트 구현

 2. EQS 컨텍스트 활용

  • 동적 쿼리 파라미터 설정

 3. EQS 디버깅

  • 에디터에서 EQS Testing Pawn 사용
[Run EQS Query]
Query Template: AdvancedPositioning
Querier: Self
RunMode: EnvQueryRunMode::SingleResult
    |
[Get Query Result as Location]
    |
[Move To Location]

 환경 쿼리와 트레이싱은 게임 월드와 상호작용하고 정보를 수집하는 핵심적인 도구입니다.

 이를 통해 충돌 감지, 시야 체크, AI 의사결정 등 다양한 게임플레이 기능을 구현할 수 있습니다.