AI 시스템

김혁·2025년 7월 25일

기술연구

목록 보기
2/10

AI 시스템의 전체 구조

플레이어 vs AI

  • 플레이어 캐릭터 : 키보드/마우스 입력 -> Player Controller -> Character -> 움직임
  • AI 캐릭터 : 작성된 로직 -> AI Controller -> Character -> 움직임

AI의 핵심 요소들

  1. AI Controller(뇌) : 로직을 기반으로 움직임을 제어
  2. Pawn/Character(몸) : Controller의 명령을 기반으로 실제 월드에서 움직이는 메시
  3. Navigation System(지도) : AI가 갈 수 있는 길을 알려주는 시스템 (A* 알고리즘 기반)
  4. Perception System(감각) : AI가 감지할 수 있는 시각, 청각 등의 감지 시스템
  5. Blackboard(기억) : AI의 기억 저장소로, 플레이어의 위치 등을 단기로 저장
  6. Behavior Tree(행동 결정) : 상황에 따라 AI의 움직임을 제어하는 것으로, if-then 로직을 시각적으로 표현한다.

필요한 모듈

  • "AIModule"
    • 언리얼 엔진의 AI 행동 로직 전반을 담당하는 핵심적인 모듈.
    • AAIController 클래스 제공
    • UAIPerceptionComponent를 통한 시각, 청각 등의 감지 시스템 제공
    • BlackboardComponent를 통한 AI 메모리 저장소 제공
    • UBehaviorTree, UBTTast, UBTService 등 Behavior Tree 시스템 제공
  • "NavigationSystem"
    • AI가 이동할 수 있는 길 찾기를 담당하는 모듈
    • UNavigationSystemV1를 통해 네비게이션 메시 생성 및 관리
  • "GameplayTasks"
    • 비동기적인 작업을 동시에, 또는 순서대로 수행할 수 있도록 돕는 모듈.
    • AI의 행동을 작업 단위로 처리해주는 시스템 제공

주요 클래스 및 함수

초기 설정

  • AIControllerClass : Pawn/Character에서 AI를 연결할 컨트롤러 설정
  • AutoPossessAI : 자동으로 AI가 Possess되는 시점을 설정.

: 월드에 NavMeshBoundsVolume이 필수적으로 필요하다. NavMeshBoundsVolume은 AI가 이동할 수 있는 부분을 계산해서 가지고 있는 액터이다.

주요 클래스

  • UNavigationSystemV1 : 경로 계산 및 NavMesh 관리
  • UPathFollowingComponent : 이동 중 경로 추적

주요 함수

  • AAIController::MoveToActor() : AI 캐릭터가 액터에게 이동
  • UNavigationSystemV1::GetRandomPointInNavigableRadius() : 랜덤 이동 지점 계산

Perception System

주요 클래스

  • UAIPerceptionComponent : AI의 감각 처리 컴포넌트
  • UAISense_Sight, UAISense_Hearing : 감각 종류
  • UAIPerceptionStimuliSourceComponent : 감지 가능한 대상에 부착되는 컴포넌트

주요 함수

  • ConfigureSense() : AIPerceptionComponent에서 감지할 감각을 설정
  • OnTargetPerceptionUpdated() : 무언가를 감지하거나 놓쳤을 때 호출되는 델리게이트
  • GetPerceivedActors(UAISense_Sight::StaticClass(), OutActors) : 감지한 액터 목록 반환

주의할 점

: 감지를 할 수 있게 하기 위해 감지 대상은 UAIPerceptionStimuliSourceComponent를 부착해야지 감지를 할 수 있게 된다.
: 다만 언리얼에서는 아래의 조건에 해당한다면 기본적으로 Pawn/Character를 StimuliSource로 등록된다. 시각/청각 소스만 자동으로 등록이 되기 때문에 이도 주의해야 한다.

  • 감지 대상이 Pawn/Character
  • Auto Register as Source 옵션이 활성화
  • PlayerController에 Possess된 상태

Blackboard

: Key-Value 방식으로 데이터를 저장한다. 여러 AI가 동일한 Blackboard 공유가 가능하고, 실시간으로 값 변경이 가능하다.

주요 클래스

  • UBlackboardComponent : AI가 가지고 있는 블랙보드 인스턴스를 다루는 클래스

주요 함수

  • SetValueAsBool(FName KeyName, bool Value) : 블랙보드의 Bool 값을 설정
  • SetValueAsObject(FName KeyName, bool Value) : 블랙보드의 Object 값을 설정
  • GetValueAsBool(FName KeyName) : Bool 값 가져오기

Behavior Tree

주요 클래스

  • UBehaviorTreeComponent : AI의 실행중인 트리 인스턴스로, AI Controller가 실행할 때 생성된다.
  • UBTTaskNode : 작업 실행용 클래스로, 실질적으로 동작하는 태스크를 정의한다.
    • UBTTask_MoveTo : 지정된 위치 또는 Actor로 이동
    • UBTTask_Wait : 일정 시간 대기
    • UBTTask_BlueprintBase : 블루프린트에서 커스터마이징 가능
    • UBTTask_SetBlackboardValue : 블랙보드 값을 설정하는 노드
  • UBTDecorator : 자식 노드가 실행 가능한지 여부를 판단
  • UBTService : 지정 주기마다 실행되는 로직으로, 감지, 거리 체크 등 상태 업데이트에 사용된다.
profile
게임 개발자를 향해..

0개의 댓글