UDN
Search public documentation:

NavigationMeshTechnicalGuideKR
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와 내비게이션 > 내비게이션 메시 테크니컬 가이드

내비게이션 메시 테크니컬 가이드


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

개요


AI가 내비게이션 메시( 또는 내비메시) 를 사용할 수 있게끔 후킹하는 법에 대한 간략 안내서입니다. 언리얼 엔진의 내비게이션 메시 시스템에 대해서는 내비게이션 메시 참고서 를 참고하십시오.

내비게이션 핸들


모든 PathNode 길찾기 함수성은 Controller 에 들어있었습니다. 길찾기에 기반한 내비게이션 메시용 새 함수성은 모두 내비게이션 핸들이라는 자체-포함 오브젝트에 캡슐화되었습니다. 내비게이션 핸들 자체는 컴포넌트라서 패쓰를 연결하려는 액터 어디에든 부착시킬 수 있습니다. 게다가 핸들은 패쓰 검색 결과를 저장합니다. 즉 생성된 패쓰를 저장하므로, 그것을 확장시키면 수행중인 패쓰 탐색(traversal) 유형에 관련된 것이면 무엇이든 저장할 수 있습니다.

AI가 내비게이션 메시를 사용해서 길찾기를 하도록 하려면:

  • Interface_NavigationHandle 구현
  • 어딘가에 접근가능한 NavigationHandle 컴포넌트 두기

내비게이션 핸들 함수성

내비게이션 핸들 함수성은 크게 세 범주로 나뉩니다.

실제 길찾기 함수성

길찾기는 패쓰 컨스트레인트와 골 이밸류에이터의 도움을 받아 수행됩니다. 상세 정보는 NavMesh Constraints And Goal Evaluators KR 페이지를 참고하십시오. 길찾기를 하려면 컨스트레인트와 이밸류에이터를 최소 하나씩 설정해 둬야 합니다. 그 작업은 보통 다음과 같은 종류의 상용구(boilerplate) 함수를 추가하는 것이 좋습니다:

function bool GeneratePathTo(Actor Goal, optional float WithinDistance, optional bool bAllowPartialPath)
   {
  if (NavigationHandle == None)
  {
    return false;
  }

      AddBasePathConstraints(false);

      class'NavMeshPath_Toward'.static.TowardGoal( NavigationHandle, Goal );
      class'NavMeshGoal_At'.static.AtActor( NavigationHandle, Goal, WithinDistance, bAllowPartialPath );

      return NavigationHandle.FindPath();
   }
   

  • FindPath() - (길찾기) A* 루프를 실행하고 골 이밸류에이터 스택이 적절한 골을 찾거나 워킹 세트가 공백으로 설정될(더이상 시도할 노드가 없을) 때까지 돌립니다. 그리고서 검색이 성공했으면 참을 반환하고, 결과 패쓰는 FindPath() 를 호출한 NavigationHandle 의 PathCache 에 저장되게 됩니다. 더욱 커스터마이징된 (커버 검색같은) 검색 상황에서는 골 이밸류에이터가 자체적인 내부 고려사항에 따라 부가 데이터를 저장할 수도 있습니다.

길 따라가기 함수

  • SetFinalDestination() - (최종 목적지 설정) 이 함수는 NavigationHandle 의 FinalDestination 파라미터를 설정합니다. 그 이유는 두 가지 입니다. 첫째, PathCache 는 에지 목록이기에 액터가 마지막 에지에 도달하고나면 패쓰의 지난 폴리에 있는 패쓰의 실제 골지점으로 액터를 보내기 위해 정보가 더 필요하게 됩니다. 둘째, 모든 패쓰 검색에 대해 이것을 자동 설정하지 않는 이유는, 현재 패쓰상에 골을 향해 이동하는 액터가 (어딘가로 달려가는 도중 커버를 찾는다든 지) 실제로 거길 경유하는 데 관계되지 않은 패쓰 검색을 할 수도 있기에, 그런 경우에는 현재 저장된 FinalDestination 을 내치지 않는 것이 좋습니다.
    ALERT! : (NavMeshGoal_At 같은) 특정 골 이밸류에이터는 전형적인 길찾기 상황에서만 사용되는 것이기에 이미 설정되어 있지 않으면 자동으로 설정해 버립니다.
  • GetNextMoveLocation() - (다음 이동 위치 구하기) 패쓰 따라가기의 주요 선수입니다. 현재 패쓰상의 어디를 따라갈지 정하고, 개체가 향할 공간상의 점을 계산합니다. (MoveTo() 에 물려줄(feed) 지점을 알아냅니다.)

내비메시 질의 함수

여기엔 나열할 게 너무 많습니다. 내비게이션 핸들 함수 전체 목록은 Navigation Mesh Reference KR 페이지를 참고하십시오. 둘 정도 짚어 보자면:
  • PointReachable() - (도달가능 지점) 내비메시 생성 과정에서 생성된 장애물 메시에 대해 라인체크를 수행합니다. 콜리전 지오메트리에 대한 일반 라인체크보다 훨씬 빠르며, (라인체크 여럿으로 구성되는) 일반 도달성 검사보다도 빠릅니다.
  • GetValidPositionsForBox() - (박스에 가능한 위치 구하기) 는 지정된 경계 내로 전달된 박스에 맞(으면서 겹치지 않)는 위치를 모두 반환합니다. 스폰 지점같은 걸 찾을 때 매우 쓸만합니다.

내비 메시 디버깅


실행시간에 내비게이션 메시 길찾기 관련 디버깅 문제에 대한 상세 정보는, Navigation Mesh Path Debugging KR 페이지를 참고하십시오.

폰 길찾기 파라미터


내비메시에 직접 관련되지 않으면서 길찾기에 영향을 끼치는 폰 자체 파라미터가 여럿 있습니다.

간단히 살펴보면:

  • MaxStepHeight - 이 폰이 (점프 없이) 'step up'(올라서기) 가능한 최대 세로 높이
  • MaxJumpHeight - 이 폰이 점프할 수 있는 최대 세로 높이(를 통해 폰이 장애물을 점프할지 우회할지 여부를 결정합니다.)
  • WalkableFloorZ - 걸어갈 수 있는 경사면의 노멀 Z 최대값 (이 값보다 큰 Z값의 경사면에서는 폰이 미끄러지게 됩니다.)

내려받기