언리얼 AI - 1

김영웅·2025년 4월 25일

언리얼의 NavMeshBoundsVolume은 Scale이 아니라 Brush 크기를 활용해 레벨 내 적용되는 지오메트리를 결정한다.
그런데 언리얼 엔진의 아키텍쳐 특성상 Brush는 런타임 중 동적 재생성이 불가능하다.
무슨 말이냐면 설계 상의 이유로 게임을 플레이하는 도중에 NavMeshBoundsVolume을 새로 생성하여 레벨 내 네비메시 적용범위를 늘리거나 줄이는 방식의 구현은 어렵다는 것이다.

이러면 AI를 맵 전체에 놔야하는 레벨 디자인이면 계속 네비메시를 연산해야할까?
성능을 엄청나게 잡아 먹을 것이다.

다행히 이러한 문제점을 고려해 언리얼 엔진은 Navigation Invoker라는 기능을 제공한다.
Navigation Invoker는 Navigation Invoker라는 컴포넌트를 가진 액터의 주변 영역만 연산해서 리소스를 아끼고, 게임 플레이는 문제없이 가능하게 하는 기능이다.

우선 엔진 -> 네비게이션 메시를 들어가서 런타임 생성을 Dynamic으로 바꿔주고

엔진 -> 네비게이션 시스템에 들어가서 네비게이션 인보커 주변에만 네비게이션 생성(Generate Navigation Only Around Navigation Invokers)를 켜준다.

AI를 쓸 액터에 NavigationInvokerComponent를 추가해주면

이렇게 한다면 위 사진과 같이 NavBounds는 범위가 크지만 Invoker가 있는 주변만 네비게이션을 연산한다.


경로 탐색

보통의 경로를 찾을 때 다익스트라 알고리즘 등과 같이 특정 경로로 이동하기 위한 비용 최적화 경로 탐색 공식을 바탕으로 경로를 탐색한다.
즉 언리얼의 경로 탐색은 “낮은 가격순”으로 선택하는 원리이다.

profile
게임 프로그래머

0개의 댓글