UDN
Search public documentation:

WaypointsTechnicalGuideKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > AI와 내비게이션 > 웨이포인트 테크니컬 가이드

웨이포인트 테크니컬 가이드


문서 변경내역: Steve Polge 작성. Matt Tonks, James Tan 수정. 홍성진 번역.

개요


내비게이션, 탐색은 미리 생성된 패쓰 네트워크를 기반으로 합니다. 이 패쓰 네트워크만으로 봇이 다닐 수도 있는 영역을 100% 덮지는 못하기에, 상황에 맞는 평가와 주변 탐색을 할 수도 있어야 합니다. 이러한 목적으로 콜리전 트리를 사용하여 주변 샘플을 뽑거나, 콜리전 데이터 구조체 속의 주변 오브젝트를 조사하기도 합니다.

레벨 디자이너는 맵 안에 NavigationPoint 를 놓아야 할 것입니다. 레벨이 빌드되면 NavigationPoint 는 그 사이에 ReachSpec 을 생성하며, 여기에는 AI 가 A 에서 B 까지의 길을 찾을 수 있도록 하는 데 사용되는 데이터가 들어 있습니다.

앵커란 무엇인가?


앵커는 AI 가 (길찾기 없이) 직접 도달할 수 있는 내비게이션 포인트를 말하며, AI 의 길찾기가 시작되는 곳이기도 합니다. 어떤 종류의 패쓰 그래프에서도 길찾기의 첫 단계는, 패쓰를 만들기에 가장 적합한 시작/끝 지점을 그래프 상에서 찾는 것입니다. 앵커는 봇의 길찾기 시작점을 나타내기에, FindPathToward() 호출 이후에는 앵커에서 골까지 루트(route, 경로)가 생깁니다.

콘트롤러


ReachedDestination()

이 함수는 현재 이동 방향으로 삼은 오브젝트를 'reached'(도달된) 것으로 간주할 것인지를 확인하기 위해, 이동 도중 AI에 의해 질의되는 함수입니다. 다른 말로 현재 목적지로 이동을 중지할 것인지, 아니면 루트 내 다음 오브젝트로 이동하거나 전체적인 골에 도착하여 이동을 멈출 것인지를 결정하기 위해, AI가 호출하는 함수라는 뜻입니다. 참고로 이 함수는 AI가 이동 대상으로 삼는 액터에서 ReachedBy() 를 호출하여, 커스텀 오브젝트에 언제 그 쪽으로 이동을 멈출지를 알릴 수 있는 기회를 줍니다. 보통 AI는 대상 오브젝트의 일정 범위 내에 들어서기 전까지는 그 오브젝트 위치로 달려가려 합니다만, 오브젝트의 콜리전 범위가 검사하려는 반경보다 큰 경우 분명 문제가 생길 것입니다. 이와 같은 오브젝트에 대해 커스텀 크기를 고려하도록 하려면 그냥 ReachedBy() 를 덮어쓰면 됩니다.

ActorReachable()

오브젝트가 직접 도달 가능한지 여부를 알기 위해 AI 가 호출하는 함수입니다. 즉 AI가 (점프해 넘어갈 수 없는) 무언가에 막히지 않고 오브젝트에 일직선으로 뛰어갈 수 있는가를 말합니다. 이동 도중 몇 가지 것들을 결정하기 위해 사용됩니다만, 목적지에 바로 뛰어가야 할지 아니면 패쓰 네트워크를 통해 길찾기를 해야할지를 결정하는 데 쓸 수 있겠습니다.

예제는 소스 코드를 보는 것이 최고입니다. 그렇다고는 해도, 이 함수가 어떤 짓을 하는지, 하이 레벨에서 살펴보면 다음과 같습니다:

  1. 검사 대상 액터가 서있는 리치스펙에 있는지, 아니면 목적지 액터가 범위 내 내비게이션 포인트 반경 내에 있는지 알아보고 일찍 빠져나옵니다. (리치스펙/내비게이션 포인트는 오프라인 검증되기에 항시 걸어갈 수 있는 곳으로 간주합니다.)
  2. 빠르게 광선투사를 하여 목적지가 보이는지 확인하고, 보이지 않으면 일찍 빠져나옵니다.
  3. 목적지 액터가 견고한 땅 위에 있는지 확인해 봅니다.

FindPathToward()

AI 위치에서 전달된 골까지의 루트를 생성하는 패쓰 네트워크 탐색을 수행하는 함수로, 생성된 루트(앵커에서 골까지의 웨이포인트 순서 리스트)를 콘트롤러의 RouteCache 에 놓습니다. 이로써 AI 가 어느 웨이포인트로 이동해야 골에 도달할 수 있을지를 알려줍니다.

FindPathToward() 는 액터 방향으로 어떻게 나아가야 할지를 결정하는 데 있어, 우선 AI 의 앵커가 사용가능한지(, 안되면 새로운 것을 찾아보고), 그 다음 앵커에서 골까지의 루트를 생성하기 위해 패쓰 네트워크를 걸쳐 탐색을 수행합니다. 이 루트가 생성되고나면 AI 는 ReachedDestination() 을 통해 웨이포인트에 도착했음을 확인할 때까지 루트의 첫 지점으로 직접 달려가게 되며, 그런 다음 AI 를 생성된 루트의 다음 웨이포인트로 달려가도록 합니다.

FindPathToward() 는 AI 가 사용할 루트를 생성하기만 하므로, 봇이 코너에 접어들거나 돌아 결국 쳐박혀 버린다면 뭔가 다른 것이 잘못된 것입니다. 선(리치스펙)이 코너를 관통한다면 show paths 콘솔 명령을 사용하는 것이 좋습니다.

MoveTo()

봇을 전달된 지점으로 직접 이동시키고, 도착하면 끝나는 잠재 함수입니다. 이 함수는 길찾기를 하지 않으며, 그냥 폰을 타겟으로 직접 인도합니다.

MoveToward()

MoveTo() 와 거의 같으나, 목적지로 액터를 받으며 이 데이터를 활용하는 추가적인 특수 처리도 있다는 점이 다릅니다. (AI 가 내비게이션 포인트 등의 방향으로 움직이는 경우 앵커를 설정합니다)