NavMesh와 AI MoveTo
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 작업
- Place Actors에서 NavMeshBoundsVolume을 바닥 전체에 배치합니다.
- P 키 또는 show Navigation true로 초록색 이동 가능 영역을 확인합니다.
- 벽의 Collision이 NavMesh 생성에 반영되는지 확인합니다.
- Enemy Character의 Capsule 크기와 Navigation Agent 설정이 맞는지 확인합니다.
C++ · 파일 경로: Source/TopDownSurvival/AI/MathAIController.h · 이동 API
UFUNCTION(BlueprintCallable, Category = "AI|Movement")
bool MoveToReachableLocation(FVector Destination, float AcceptanceRadius);
C++ · 파일 경로: Source/TopDownSurvival/AI/MathAIController.cpp
#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. 핵심 요약
NavMesh와 AI MoveTo 미니 퀴즈
선택 즉시 정답과 해설을 확인할 수 있습니다. 결과는 이 브라우저에만 저장됩니다.
학습을 마쳤나요?
직접 실습과 점검 질문까지 확인한 뒤 완료로 표시하세요.