

이전엔 Behavior Tree로 AI 행동로직을 구현하였지만, 트리 구조라 로직이 복잡해지면 엄청 구조가 깊어지게 되고, 디버깅도 어렵고 성능도 좋지 않음
State Tree는 FSM과 Task 기능을 합쳐 성능 좋음

액터 자체에 붙어서 동작
AI 컨트롤러 없이 State Tree에 의해서 액터가 동작함
독립적으로 움직이는 신호등, 자동문 같은 액터에 사용
AI 컨트롤러가 필요한 State Tree
AI Character에 사용됨

AIController Class / Context Actor Class : 해당 State Tree와 함께 사용될 컨트롤러와 캐릭터 설정
Context : 기본적으로 가지고 시작할 데이터 정보 (레퍼런스)
Theme : 보기 편하게 색으로 구분해줄 수 있는 기능 (정말 시각용)
현재 무엇을 해야하는지(상태)를 정의한 노드
각 State는 Task와 Transition을 가짐
Task 여러 개 가지면 동시에 실행됨

Root
|-A
| |-a a가 활성화 되어 있으면, A와 a 둘 다 현재 상태로 활성화 된 것임
|
|-B
Child
Sibling

Name : 노드 이름
Tag : GAS의 태그를 노드에 붙일 수 있음. 자식 노드는 부모 노드의 Tag를 물려받음
Color : 보기 편하게 색깔 설정
Type

Selection Behavior : 부모가 어느 자식 선택할건지

| 옵션 이름 | 설명 |
|---|---|
| None (선택하지 않음) | 아무 동작도 설정되지 않음 |
| Try Enter | Parent 자신만 실행하고 자식 노드는 무시 |
| Try Select Children In Order | 위에서부터 순서대로 조건을 검사하여 실행 (기본값) |
| Try Select Children At Random | 조건을 통과한 Child 중 무작위로 하나를 선택 |
| Try Select Children With Highest Utility | Utility 점수가 가장 높은 Child를 선택 |
| Try Select Children At Random Weighted By Utility | Utility 점수 비율대로 가중 무작위 선택 |
| Try Follow Transitions | Child 선택 없이 Transition 조건을 먼저 검사 |
StateTreeTaskBlueprintBase를 부모로 하여 블루프린트 생성
생명주기 함수

Variables

IN이 표시되므로 설정해줌
AI Move To로 이동하고, Finish Task로 task 종료 후 성공 여부 저장
Finish Task : 해당 Task가 들어있었던 State 자체를 종료시킴. 따라서 같은 State에 있던 다른 Task들도 다 종료됨
이동할 위치 찾고 해당 위치를 변수에 저장해야함
하지만 Task는 동작을 수행하는 역할이라 Task 대신, 캐릭터 "블루프린트"에 저장

![]() ![]() |
|---|
Radius 파라미터 생성

Task의 입력인자로 파라미터와 Context Actor 연결


