info8995 님의 블로그

플레이어를 추적하는 AIController 구현 본문

TIL(Today I Learned)/Unreal Engine

플레이어를 추적하는 AIController 구현

info8995 2025. 4. 24. 19:19

1. 목표

  • AI가 플레이어를 인지 → 추적 → 놓침 → 재추적/포기 등의 상태 전환 기반 행동을 하도록 구현
  • 시야 기반 Perception 시스템을 사용하여 감지
  • 거리 기반 Detection / Chase / LoseInterest 로직 포함
  • 끊긴 NavMesh에서도 자동 점프 이동이 가능하도록 자동 네비게이션 링크 테스트 포함

🧠 2. 핵심 클래스 구성

▶️ AChaser_AIController

  • AIController 상속
  • 거리/상태 기반 추적 로직 구현
  • UAISenseConfig_Sight를 통한 시야 감지 구성

▶️ 상태 머신: EAIState

⚙️ 3. 주요 변수 및 파라미터

변수명설명기본값
DetectionRadius 의심 상태 전환 거리 1500.0f
ChaseRadius 추적 시작 거리 1000.0f
LoseInterestRadius 추적 포기 거리 2000.0f
TargetActor 추적 대상 (주로 플레이어) ACharacter*
LastKnownLocation 마지막 감지 위치 저장 FVector

👁️ 4. AI Perception (시야 감지)

 

  • OnPerceptionUpdated 델리게이트로 감지 여부 콜백 처리
  • 성공 감지 시: StartChasing, 실패 시: MoveTo LastKnownLocation → Suspicious 상태 전환

5. 상태 전환 로직

감지 거리 → 추적 거리 → 추적 종료 거리 → 다시 Idle 로 순환되는 구조

6. 디버깅 & 시각화

DrawDebugLine(GetWorld(), GetActorLocation(), TargetActor->GetActorLocation(), FColor::Red, false, -1, 0, 2.0f);
  • 추적 중 디버그 라인 표시하여 AI의 시선 방향과 타겟 위치 시각화

🏃‍♂️ 7. 자동 네비게이션 링크 (점프 이동)

  • RecastNavMesh → Runtime Generation → 자동 NavLink 활성화
  • GeneratedNavLinksProxy 블루프린트에서 점프 처리 이벤트 그래프 작성
  • 끊긴 NavMesh에서도 AI가 장애물을 뛰어넘어 이동 가능

배운 점 & 느낀 점

  • 시야 기반 감지를 통해 자연스럽고 현실적인 AI 행동 구현 가능
  • Perception + StateMachine + Distance Condition 조합은 매우 강력한 AI 로직 구성 방식
  • NavLink 자동화를 통해 복잡한 맵에서도 AI가 부드럽게 이동할 수 있도록 구성 가능
  • 상태 전환과 거리 체크를 계층적으로 구성하니 로직이 훨씬 안정적