
State Tree는 언리얼 엔진에서 제공하는 상태 기반(States) 로직 작성 시스템이다.
AI 행동, 게임플레이 로직 등 “현재 상태에 따라 무엇을 할지”를 구조적으로 구성할 수 있게 해준다.
게임/AI 로직은 보통 다음 문제를 만나기 쉽다.
State Tree는 이런 문제를 줄이기 위해 다음 방식을 제공한다.
| 특징 | Behavior Tree (BT) | State Tree (ST) |
|---|---|---|
| 핵심 철학 | 질문 기반: “지금 내가 뭘 해야 하지?” (매번 루트부터 검색) | 상태 기반: “지금 난 이 상태야, 다음 상태로 갈까?” (전이 조건 감시) |
| 흐름 제어 | Selector, Sequence 노드에 의한 우선순위 | State 간의 Direct Transition(전기/전이) |
| 데이터 접근 | Blackboard(중앙 집중형 데이터 저장소) | Schema 기반 파라미터 및 프로퍼티 바인딩 |
| 복잡도 관리 | 데코레이터와 서비스가 많아지면 실행 순서 파악이 어려움 | 상태가 중첩(Nested)되어 있어 상위 수준 로직 상속이 명확함 |
| 최적화 강점 | 개별 에이전트의 복잡한 의사 결정 | Mass Entity 기반의 대규모 군중 및 상태 중심 로직 |

| 번호 | 구성 요소 | 설명 |
|---|---|---|
| 1 | 루트(Root) | StateTree 실행 시작 시 선택되는 첫 번째 스테이트이다. |
| 2 | 셀렉터 스테이트(Selector State) | 자손 스테이트가 있는 스테이트를 뜻한다. 이 스테이트는 직접 선택되지 않으며, 선택되면 자손 스테이트 중 하나에게로 선택이 이어진다. |
| 3 | 스테이트 진입 조건(State Enter Condition) | 스테이트 선택 가능 여부를 결정하는 조건 목록을 말한다. |
| 4 | 태스크(Task) | 스테이트에 속하면서 스테이트 활성화 시 실행되는 액션 세트를 뜻한다. |
| 5 | 트랜지션(Transition) | 스테이트 선택 프로세스를 트리거하는 조건을 정의한다. 트랜��션은 태스크가 완료, 성공 또는 실패하거나 모니터링되는 조건이 성공하면 트리거된다. |
State Tree의 기본 단위이다.

상태 선택 또는 전이 판단에 사용된다.
조건은 전이 및 선택 논리의 기반이 된다.

상태가 활성화되었을 때 수행할 “행동 단위”이다.
예시는 다음과 같다.
태스크는 상태에 붙어서 실행되며, 성공/실패/진행 중 같은 결과를 통해 다음 흐름에 영향을 준다.

어떤 상태에서 다른 상태로 넘어가는 규칙이다.

State Tree가 참조/사용할 수 있는 컨텍스트 타입과 데이터 접근 방식의 기준을 정한다.

선택된 State Tree Schema를 기반으로 자동 제공되는 사전 정의 데이터이다.
State Tree가 지금 어떤 주체와 환경에서 동작 중인지 알려주는 기본 정보이다.

State Tree 실행 중 외부에서 전달받아 참조할 수 있는 입력 파라미터
동일한 State Tree를 상황에 따라 재사용할 수 있도록 함.

파라미터/컨텍스트만으로는 노출하기 어려운 데이터를 트리에 제공하기 위한 방식이다.
런타임에 실행 가능한 별도의 클래스이며, 변수를 보유할 수 있고 다음 타이밍에 커스텀 코드를 수행할 수 있다.
이벨류에이터의 프로퍼티는 다음 대상에 바인딩될 수 있다.
트리 시작부터 종료까지 항상 활성화되는 StateTree 태스크이다.
루트 스테이트보다 먼저 실행되며, 스테이트 선택에 필요한 값처럼, 트리 전반에서 유지되는 영구 데이터를 마련할 때 유용하다.

Weight는 보통 State Tree에서 “여러 후보 중 무엇을 선택할지”가 필요한 상황에서, 특정 선택지(상태/전이/아이템 등)에 가중치(우선도)를 부여하는 개념으로 쓰인다.
