State Tree セレクタの概要
StateTree にはツリー構造に整理されている、親と子状態を持つ状態が含まれます。StateTree を実行すると、ルート状態から開始して下に移動し、選択動作 および入力条件に基づいて子状態を選択します。このドキュメントでは、各状態で利用可能な選択動作の概要について説明します。
StateTree には、子状態に対して以下のような状態選択動作があります。

選択動作 | 説明 |
---|---|
入力を試行 | 子状態を持っていても状態が選択されます。 |
順番に子の選択を試行 | 子リストに表示される順序で最初の子状態を選択しようと試みます。子状態が存在しなければ、入力を試行と同様に動作します。 |
ランダムに子の選択を試行 | 子状態の順序をシャッフルし、入力条件を満たしている最初の子状態を選択しようと試みます。子状態が存在しなければ、入力を試行と同様に動作します。 |
ユーティリティが最も高い子の選択を試行 | ユーティリティ スコアが最も高い子状態を選択しようと試みます。2 つ以上の状態が同じスコアな場合、リストの最初の状態を選択します。 |
ユーティリティで加重しランダムに子の選択を試行 | 各状態のユーティリティ スコアを使用し、子状態をランダムに選択します。正規化されたユーティリティ スコアが、各状態が選択される確率になります。 |
トランジションのフォローを試行 | 状態がトランジションの対象となる場合、代わりにトランジションをトリガーしようと試みます。 |
State Tree ユーティリティ セレクタ
これらのセレクタは子状態のユーティリティ スコアに基づいています。各子状態は、親状態が入力する子状態の選択を開始するとき、スコアを出力します。親はすべての子状態の中から最もユーティリティの高い状態を選択します。

ユーティリティ セレクタには以下のコンポーネントがあります。
- (1) Consideration
- (2) 論理演算子 (AND、OR)
- (3) インデント
- (4) ウェイト
Consideration は、状態をスコアリングする際にユーザーが考慮する側面を表す、新しいタイプの StateTree ノードです。Consideration は 0 と 1 の間の正規化されたスコアを出力します。
たとえば、ヘルス値が減るにつれ増えるスコアを出力する Enemy Low Health Consideration がある場合があります。敵がプレイヤーの近くにいるかどうかなど、特定の条件に基づいて固定のスコアを出力する Consideration もある場合があります。
複数の Consideration は、ロジック演算子 を使用して結合できます。現在、AND と OR の 2 種類の演算子が利用可能です。
AND 演算子は、2 つの Consideration 入力スコアの低いほうを出力します。一方、OR 演算子は、2 つの Consideration 入力スコアの高いほうを出力します。すべての Consideration スコアは結合され、正規化スコア (0 - 1) に変換されます。
複数の Consideration の場合、演算子の優先順位を制御するため インデント が使用されます。上の例では、AND 演算子が OR 演算子の前に計算されます。
それから、Consideration の結合された正規化スコアは ウェイト によってスケール (乗算) され、この状態の最終スコアを算出します。デフォルトでは、ウェイト値は 1 です。その場合、最終スコアは結合された正規化スコアと同じになります。ユーザーはウェイト値を変更し、Consideration に加えて子状態に向けて、または子状態に対してバイアスを追加できます。ウェイトによってスケールされた最終スコアは正規化されません。
上の画像の例では、Distance2Med は 0.6 のスコアを出力し、Health は 0.4 のスコアを出力し、SearchForMed は 0.2 のスコアを出力し、Weight は 1 を出力すると想定します。その状態の最終ユーティリティ スコアは、以下のようになります。
Weight Max(Distance2Med , Min(Health , SearchForMed )) 1 Max(0.6,Min(0.4,0.2)) = 0.6
Consideration 型
フロート入力 Consideration

フロート入力 Consideration は、スコアの出力に レスポンス カーブ を使用します。カーブは [Details (詳細)] パネルで直接編集することも、外部フロート カーブ アセットを入力することもできます。
入力 は変数にバインドでき、入力範囲で正規化されます。この正規化値は、レスポンスカーブが正規化値を取得するために使用します。0 から 1 の値の外側のカーブのどの部分にも値へのエフェクトはありません。
列挙型入力 Consideration

列挙型入力 Consideration は、スコアを出力するため列挙-スコア参照テーブルを使用します。入力 は、外部ブループリント列挙アセット型にバインドされ、ユーザーは列挙型値とそのスコアを構成できます。テーブルに不足している値は、0 のスコアを出力します。
定数入力 Consideration

定数入力 Consideration は定数スコアを出力します。この Consideration は、ユーティリティで加重しランダムに子の選択を試行する とともに使用し、荷重ランダム選択動作を模倣することができます。
State Tree ユーティリティ選択動作
ユーティリティが最も高い子の選択を試行

ユーティリティが最も高い子の選択を試行 の選択動作は、入力条件を満たしすべての子状態の中でユーティリティ スコアの最も高い子状態を選択します。
ユーティリティで加重しランダムに子の選択を試行

ユーティリティで加重しランダムに子の選択を試行 の選択動作は、入力条件を満たすランダムな子状態を選択します。 各子状態の選択される確率は、そのユーティリティ スコアによって加重されます。