본문으로 건너뛰기
게임 수학 · 게임 AI 기초집LESSON 14

NavMesh와 AI MoveTo

난이도초급
예상 시간50분
선수지식13강의 AI 구조

14강. NavMesh와 AI MoveTo

1. 이번 강의에서 해결할 문제

목표 방향으로 AddMovementInput만 호출하니 적이 벽에 걸립니다. 레벨 충돌에서 생성된 NavMesh 그래프를 이용해 도달 가능한 경로를 요청합니다.

2. 학습 목표

3. 핵심 개념

Navigation System은 레벨 충돌로부터 이동 가능한 Mesh를 만들고 Polygon 비용을 바탕으로 경로를 찾습니다. 공식 Navigation System 문서는 Tile, Generation Mode, Area Cost와 회피 기능을 설명합니다.

방향 벡터는 목표가 어디 있는지 알려 주지만 벽을 우회할 경로는 알려 주지 않습니다. AIController가 MoveTo를 요청하고 Path Following과 CharacterMovement가 실제 이동을 처리합니다.

4. 단계별 실습

Unreal Editor 작업

  1. Place Actors에서 NavMeshBoundsVolume을 바닥 전체에 배치합니다.
  2. P 키 또는 show Navigation true로 초록색 이동 가능 영역을 확인합니다.
  3. 벽의 Collision이 NavMesh 생성에 반영되는지 확인합니다.
  4. Enemy Character의 Capsule 크기와 Navigation Agent 설정이 맞는지 확인합니다.

C++ · 파일 경로: Source/TopDownSurvival/AI/MathAIController.h · 이동 API

MathAIController.h · 추가
UFUNCTION(BlueprintCallable, Category = "AI|Movement")
bool MoveToReachableLocation(FVector Destination, float AcceptanceRadius);

C++ · 파일 경로: Source/TopDownSurvival/AI/MathAIController.cpp

MathAIController.cpp · MoveTo
#include "Navigation/PathFollowingComponent.h"
#include "NavigationSystem.h"

bool AMathAIController::MoveToReachableLocation(
FVector Destination, float AcceptanceRadius)
{
if (!GetPawn())
{
return false;
}

FNavLocation Projected;
UNavigationSystemV1* Navigation =
FNavigationSystem::GetCurrent<UNavigationSystemV1>(GetWorld());
if (!Navigation ||
!Navigation->ProjectPointToNavigation(Destination, Projected))
{
UE_LOG(LogTemp, Warning, TEXT("Destination is outside NavMesh"));
return false;
}

const EPathFollowingRequestResult::Type Result = MoveToLocation(
Projected.Location,
FMath::Max(1.0f, AcceptanceRadius),
true,
true,
true,
false,
nullptr,
true);

return Result != EPathFollowingRequestResult::Failed;
}

Blueprint 작업

BP_MathAIController에서 테스트 키 입력 또는 임시 BeginPlay를 사용해 레벨의 TargetPoint 위치로 MoveToReachableLocation을 호출합니다. 테스트 후 임시 호출은 제거합니다.

5. 코드와 수학·AI가 동작하는 이유

ProjectPointToNavigation은 임의 목표를 가까운 NavMesh 위치로 투영합니다. MoveToLocation은 경로 요청 결과를 즉시 반환하며 실제 도착은 비동기입니다. 도착 후 행동은 Behavior Tree Task 완료나 MoveCompleted 이벤트로 연결해야 합니다.

6. 자주 하는 실수와 해결법

7. 직접 실습

8. 이해 점검 질문 3개

9. 핵심 요약

MINI QUIZ

NavMesh와 AI MoveTo 미니 퀴즈

선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.

0 / 2
  1. 문제 1“NavMesh와 AI MoveTo”에서 오류나 데이터 손실을 줄이는 선택은 무엇인가요?
  2. 문제 2‘MoveTo를 Tick마다 재요청’ 실수를 판단할 때 “NavMesh와 AI MoveTo” 강의가 제시한 기준은 무엇인가요?
LESSON STATUS

학습을 마쳤나요?

직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.

14강. NavMesh와 AI MoveTo 미완료 상태