환경 쿼리와 트레이싱 기본 활용
언리얼 엔진의 환경 쿼리와 트레이싱 기능은 게임 월드와 상호작용하고 정보를 수집하는 강력한 도구입니다.
이 절에서는 블루프린트에서 이러한 기능을 활용하는 방법을 살펴보겠습니다.
라인 트레이스
라인 트레이스는 시작점에서 끝점까지 직선을 그어 충돌을 감지하는 방법입니다.
[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 의사결정 등 다양한 게임플레이 기능을 구현할 수 있습니다.