1. 언리얼 엔진 5에서 AI 행동 제어를 위한 스테이트 트리 활용법 [0]

thumbnail 언리얼 엔진 5의 스테이트 트리(State Tree)는 AI의 복잡한 행동 로직을 상태와 전환 규칙으로 체계적으로 관리하는 강력한 도구이다.

1.1. 스테이트 트리 기본 개념 및 설정 [0]

  1. 스테이트 트리란 무엇인가? [3]
    • 액터, 폰 또는 AI의 행동을 제어하는 도구이다.
    • 다양한 행동들을 상태(States)로 구성하고, 상태 간 전환 규칙인 전환(Transitions)으로 AI의 복잡한 행동 로직을 관리한다.
  2. 스테이트 트리 플러그인 활성화 [4]
    • Edit > Plugins 메뉴에서 State Tree를 검색하여 활성화한다.
    • Gameplay State Tree 플러그인도 함께 활성화해야 한다.
    • 플러그인 활성화 후 프로젝트를 재시작해야 한다.

1.2. 스테이트 트리 에디터 인터페이스 및 구성 요소 [9]

  1. 스테이트 트리 생성 및 에디터 창 구성 [9]
    • 콘텐츠 브라우저에서 우클릭 > Artificial Intelligence > State Tree를 선택하여 생성한다.
    • State Tree Component를 선택하고 store enemy AI와 같이 이름을 지정하여 연다.
    • 스테이트 트리 에디터는 크게 세 개의 창으로 구성된다.
  2. 스테이트 트리 에디터 주요 창 설명 [14]
    • Asset Details: 스테이트 트리의 파라미터(Parameters), 평가자(Evaluators), 전역 태스크(Global Tasks) 등 속성을 사용자 정의하는 곳이다.
    • States Window: AI의 실제 로직 블록인 상태(States)를 생성하고 구성하는 곳이다.
    • Details Panel: 현재 선택된 상태의 상세 속성을 보여주는 곳이다.
  3. 스테이트의 핵심 구성 요소 [33]
    • 진입 조건(Enter Conditions): 해당 상태로 진입하기 위한 규칙이다.
    • 태스크(Tasks): 상태 내에서 실제로 실행되는 로직으로, 블루프린트 그래프와 연결된다.
    • 전환(Transitions): 태스크 완료 후 다음 상태로 이동하는 규칙이다.

1.3. AI 추격 로직 구현하기 [20]

  1. 'Chase Player' 상태 생성 및 태스크 정의 [20]
    • Root 아래에 Chase Player라는 새로운 상태를 생성한다.
    • Chase Player 상태의 태스크(Tasks)에서 New Task를 선택하여 사용자 정의 태스크를 생성한다.
    • 태스크 이름을 _Chase Player로 지정하고 블루프린트 그래프를 연다.
  2. AI 추격 로직 블루프린트 구현 [40]
    • 태스크의 Enter State 함수를 오버라이드한다.
    • AI Move To 노드를 사용하여 AI가 플레이어를 따라가도록 설정한다.
    • AI Pawn 변수를 생성하고 Instance Editable로 설정하여 외부에서 참조할 수 있게 한다.
    • Get Player Character 노드를 사용하여 플레이어를 대상으로 지정한다.
    • Acceptance Radius를 120으로 설정하여 너무 가까이 다가가지 않도록 한다.
    • On Success 시 Finish Task 노드를 호출하여 태스크 완료를 알린다.
  3. 스테이트 트리에서 태스크 연결 및 변수 바인딩 [54]
    • Chase Player 상태의 태스크 목록에 방금 생성한 _Chase Player 태스크를 추가한다.
    • AI Pawn 변수를 Actor 기본 변수에 바인딩하여 현재 액터를 참조하도록 설정한다.
    • 이를 위해 BP_EnemyAI 블루프린트 클래스를 생성하고, State Tree Component를 추가한 후 store enemy AI 스테이트 트리를 할당한다.
  4. 내비게이션 메쉬 설정 및 AI 추격 테스트 [69]
    • AI가 이동할 수 있는 경로를 계산하기 위해 Nav Mesh Bounds Volume을 레벨에 추가하고 크기를 조절한다.
    • P 키를 눌러 내비게이션 메쉬가 녹색으로 표시되는지 확인한다.
    • 플레이하면 AI가 플레이어를 추격하는 것을 확인할 수 있다.
    • AI의 이동 속도를 조절하고 회전 방식을 부드럽게 설정한다.

1.4. AI 공격 로직 및 상태 전환 구현 [83]

  1. 'Attack Player' 상태 생성 및 태스크 정의 [83]
    • Root 아래에 Attack Player 상태를 생성한다.
    • Attack Player 상태의 태스크(Tasks)에서 _Attack Player라는 사용자 정의 태스크를 생성한다.
    • 태스크의 Enter State 함수에서 Play Montage 노드를 사용하여 공격 애니메이션을 재생한다.
    • Enemy AI 변수를 생성하여 Play Montage 노드에 연결한다.
    • 공격 애니메이션 몽타주를 생성하고 태스크에 추가한다.
    • 몽타주 재생 후 약간의 딜레이를 주고 Finish Task 노드를 호출한다.
  2. 상태 전환 설정 및 공격 로직 테스트 [98]
    • Chase Player 상태에서 Attack Player 상태로 전환되도록 전환(Transitions)을 설정한다.
    • Attack Player 상태 완료 후 다시 Root 상태로 돌아가도록 전환을 설정하여 추격-공격-추격 과정을 반복하게 한다.

1.5. AI 상태 관리 개선: 계층 구조 및 조건부 진입 [84]

  1. 상태 계층 구조화 및 카테고리 활용 [84]
    • On Seeing Player와 같은 카테고리를 생성하여 Chase Player와 Attack Player 상태를 하위로 배치한다.
    • 이를 통해 AI의 행동 상태를 더욱 체계적으로 관리할 수 있다.
  2. 'Idle' 상태 생성 및 진입 조건 설정 [104]
    • Idle 상태를 생성하고, 플레이어를 보지 않을 때 진입하도록 설정한다.
    • 파라미터(Parameters)로 Is Seeing Player라는 불리언 변수를 생성한다.
    • Idle 상태의 진입 조건으로 Is Seeing Player가 False일 때를 설정한다.
    • On Seeing Player 카테고리의 진입 조건으로 Is Seeing Player가 True일 때를 설정한다.
    • 이 조건을 통해 AI가 플레이어를 감지하면 추격 및 공격 상태로 전환하고, 감지하지 않으면 대기 상태로 돌아가도록 제어할 수 있다.

1.6. 추가 설정 및 마무리 [120]

  1. 애니메이션 블루프린트 적용 [120]
    • AI의 움직임에 맞는 애니메이션을 재생하기 위해 애니메이션 블루프린트를 설정한다.
  2. 최종 결과 확인 [122]
    • 모든 설정이 완료된 후 플레이하여 AI가 추격, 공격, 대기 등 다양한 행동을 자연스럽게 수행하는지 확인한다.
    • 영상 시청자에게 좋아요와 구독을 독려하며, 디스코드 서버 참여를 안내한다.