Post

Unreal: 스테이트 트리(State Tree, ST)

Unreal: 스테이트 트리(State Tree, ST)

스테이트 트리(State Tree, ST)

기존 언리얼에서 AI 구성을 위해 사용하던 BT의 개념에 상태 머신(State Machine)형태를 합친 형태의 범용 계층형 상태 머신이다. BT 대신 고도화된 AI 행동 패턴을 구성하는데 사용할 수 있다. 다만 특징에 따라 적합한 경우는 나뉠 수 있다. FSM형태로 표현될 수 있는 형태면 ST를 고려해볼법 하다.

  • 1-2개 수준의 단순한 행동을 반복한다 코드로 구현하는게 더 나을 수 있다.
  • 여 행동을 매번 평가해 결정해햐하는 때라면 BT가 더 좋다.
  • 상태에 따라 행동이 명확히 구분되고, 상태에서 상태로 전환하는 구조라면 ST가 낫다.

image

기본으로 포함되는 플러그인은 아니라서, Plugins에 들어가 활성화해주어야 한다. GameplayStateTree와 StateTree를 활성화하고 재시작해주면 사용 가능하다.

image

에디터 상에서 StateTree를 상속받는 블루프린트로 생성 가능하다.

image

AIController에서는 이를 담을 StateTreeAI 컴포넌트를 추가하고, 그 안에는 사용할 ST를 설정해주어야 한다.

스테이트 트리를 생성하고 열어보면 열어보면 몇가지 구성요소를 가지게된다.

  • 상태(State)
    • ST의 기본이 되는 단위이다.
    • 상태 안에는 실행할 일련의 작업(Task)들과, 다른 상태로 움직일 조건(모든 작업의 종료, 수치의 변화 등)을 설정해놓을 수 있다.
  • 작업(Task)
    • 상태 안에서 수행될 연산,지연등의 행동들이다.
    • 여러개가 있으면 위에서부터 아래로 순차 실행된다.
    • State Tree Task로 사용자만의 작업을 만들어 활용할 수도 있다.
  • 전환(Transition)
    • 하나의 상태에서 다른 상태로 바뀔 수 있음을 나타내는 트리거이다.
    • 작업의 완료나 실패, 특정한 값이 조건을 만족하는지등에 따라 현재 상태를 지정된 상태로 바꾼다. AI는 모든 상태와 행동을 계산하지 않고, 현재 상태에서의 작업과 그에 따라 전환 가능한 상태들만 검사하기에, 전체 행동의 범위를 계산/확인하는 BT에 비해 복잡한 AI에선 연산 비용이 줄어들 수 있다. 다만 위에서 말했듯 간단한 AI에는 오히려 오버엔지니어링일 수 있다.

스테이트 트리 테스크(State Tree Task, STT)

사용자가 별도로 정의하는 스테이트 트리에서 사용 가능한 동작이다. EnterState에서 시작해 FinishTask로 이어지는 사이에 블루프린트 노드로 기능을 구현할 수 있다. 필요에 따라 여러 변수를 추가해 동작에 활용할 수 있다.

  • Context - ST실행에 필요한 외부 참조로, AIController, 폰등에 해당한다.
  • Input - ST로부터 입력받아 동작에 활용할 변수값이다.
  • Output - STT에서 계산해서 ST에 노출시켜줄 값이다.
This post is licensed under CC BY 4.0 by the author.