스테이트 트리 선택 툴 개요
스테이트 트리에는 부모 및 자손 스테이트가 트리 구조로 배열되어 있습니다. 스테이트 트리가 실행되면 루트 스테이트에서 시작해 아래로 이동하며 선택 비헤이비어(selection behavior) 및 조건 입력에 따라 자손 스테이트를 선택합니다. 이 문서에서는 각 스테이트에서 이용 가능한 선택 비헤이비어에 대한 개요를 제공합니다.
스테이트 트리는 자손 스테이트에 대해 다음의 스테이트 선택 비헤이비어를 포함합니다.

선택 비헤이비어 | 설명 |
---|---|
진입 시도(Try Enter) | 자손 스테이트가 있더라도 스테이트가 선택됩니다. |
순서에서 첫 번째 자손 선택 시도(Try Select Children in Order) | 자손 목록에 나타나는 순서에서 첫 번째 자손 스테이트를 선택하려고 시도합니다. 자손 스테이트가 없으면 진입 시도와 똑같이 행동합니다. |
랜덤으로 자손 선택 시도(Try Select Children at Random) | 자손 스테이트의 순서를 셔플하고 진입 조건을 충족한 첫 번째 자손을 선택하려고 시도합니다. 자손 스테이트가 없으면 진입 시도와 똑같이 행동합니다. |
유틸리티가 가장 높은 자손 선택 시도(Try Select Children with Highest Utility) | 유틸리티 점수가 가장 높은 자손 스테이트를 선택하려고 시도합니다. 두 개 이상의 스테이트 점수가 같으면 목록에서 첫 번째 스테이트를 선택합니다. |
유틸리티 가중치를 적용하여 랜덤으로 자손 선택 시도(Try Select Children at Random Weighted by Utility) | 각 자손 스테이트의 유틸리티 점수를 사용하여 랜덤으로 자손 스테이트를 선택합니다. 각 스테이트의 선택 확률은 정규화된 유틸리티 점수입니다. |
트랜지션 따라가기 시도(Try Follow Transitions) | 트랜지션에 대해 스테이트가 고려되면 대신 트랜지션을 트리거하려고 시도합니다. |
스테이트 트리 유틸리티 선택 툴
이 선택 툴은 자손 스테이트의 유틸리티 점수를 기반으로 합니다. 각 자손 스테이트는 부모 스테이트가 진입할 자손 스테이트 선택을 시작할 때 점수를 출력합니다. 부모는 모든 자손 스테이트 중에서 가장 유틸리티 점수가 높은 스테이트를 선택합니다.

유틸리티 선택 툴에는 다음과 같은 컴포넌트가 있습니다.
- (1) 고려
- (2) 논리 연산자(AND, OR)
- (3) 인덴트
- (4) 가중치
고려(Consideration) 는 스테이트 점수를 매길 때 사용자가 고려하기를 원하는 측면을 나타내는 새로운 스테이트 트리 노드 타입입니다. 고려는 0에서 1 사이의 정규화된 점수를 출력합니다.
예를 들어 체력 값이 감소할수록 증가하는 점수를 출력하는 '적 낮은 체력 고려(Enemy Low Health Consideration)'가 있을 수 있습니다. 적이 플레이어 근처에 있는지 여부 등 특정 조건을 기반으로 고정된 점수를 출력하는 고려도 있을 수 있습니다.
다수의 고려가 논리 연산자(Logical Operator) 를 사용하여 함께 결합됩니다. 현재 사용 가능한 연산자는 AND 및 OR, 두 가지입니다.
AND 연산자는 두 고려 입력 점수 중 낮은 값을 출력합니다. 반면에 OR 연산자는 두 고려 입력 점수 중 높은 값을 출력합니다. 모든 고려 점수는 결합되어 정규화된 점수(0~1)로 변환됩니다.
다수의 고려가 있는 경우 인덴트(indent) 를 사용하여 연산자 우선순위를 제어합니다. 위 예시에서 AND 연산자가 OR 연산자보다 먼저 계산됩니다.
결합되고 정규화된 고려 점수에 가중치(Weight) 가 곱해져 스케일 조절되어 이 스테이트의 최종 점수가 산출됩니다. 기본적으로 가중치 값은 1이며, 이 경우 최종 점수는 결합되고 정규화된 점수와 같습니다. 사용자는 고려에 더해 가중치 값을 수정하여 자손 스테이트에 유리하거나 불리하게 추가 바이어스를 적용할 수 있습니다. 가중치로 스케일 조절된 최종 점수는 정규화되지 않습니다.
위 예시 이미지에서 Distance2Med가 0.6, Health가 0.4, SearchForMed가 0.2의 점수를 출력하고 가중치가 1이라고 가정해 보겠습니다. 이 스테이트의 최종 유틸리티 점수는 다음과 같습니다.
가중치 Max(Distance2Med , Min(Health , SearchForMed )) 1 Max(0.6, Min(0.4, 0.2)) = 0.6
고려 타입
플로트 입력 고려

플로트 입력 고려(Float Input Consideration) 는 점수 출력에 반응 커브(Response Curve) 를 사용합니다. 이 커브는 디테일(Details) 패널에서 직접 편집할 수도 있고, 아니면 외부 플로트 커브(external Float Curve) 에셋을 입력할 수도 있습니다.
입력(Input) 은 변수에 바인딩되고 입력 범위로 정규화될 수 있습니다. 이 정규화된 값은 응답 커브에서 정규화된 값을 구하는 데 사용됩니다. 0~1 값 범위 밖에 있는 커브 부분은 값에 영향을 미치지 않습니다.
열거형 입력 고려

열거형 입력 고려(Enum Input Consideration) 는 열거형-점수 룩업 테이블을 사용하여 점수를 출력합니다. 입력 은 외부 블루프린트 열거형 에셋 타입에 바인딩되며 사용자가 열거형 값과 점수를 환경설정할 수 있습니다. 표에 없는 값은 점수 0을 출력합니다.
상수 입력 고려

상수 입력 고려(Constant Input Consideration) 는 상수 점수를 출력합니다. 이 고려는 유틸리티 가중치를 적용하여 랜덤으로 자손 선택 시도 와 함께 사용되어 가중치가 적용된 랜덤 선택 비헤이비어를 모방할 수 있습니다.
스테이트 트리 유틸리티 선택 비헤이비어
유틸리티가 가장 높은 자손 선택 시도

유틸리티가 가장 높은 자손 선택 시도 선택 비헤이비어는 모든 자손 스테이트 중에 진입 조건을 충족하고 유틸리티 점수가 가장 높은 자손 스테이트를 선택합니다.
유틸리티 가중치를 적용하여 랜덤으로 자손 선택 시도

유틸리티 가중치를 적용하여 랜덤으로 자손 선택 시도 선택 비헤이비어는 진입 조건을 충족하는 랜덤 자손 스테이트를 선택합니다. 각 자손 스테이트 선택 확률에 유틸리티 점수가 가중치로 적용됩니다.