# ステートマシンの使い方

# ArborFSMコンポーネントの追加

ステートマシンを使用するにはArborFSMコンポーネントが必要です。

ArborFSMコンポーネントの追加には以下のような方法があります。

## HierarchyウィンドウのCreateボタン

- HierarchyウィンドウのCreateボタンをクリックするかウィンドウ内を右クリック
- Arbor/ArborFSMを選択
- ArborFSMが追加されている状態のGameObjectが作成される。

## ArborEditorウィンドウのツールバー

- ArborEditorウィンドウを開き、ツールバーの「作成」ボタンをクリック
- ArborFSMを選択
- ArborFSMが追加されている状態のGameObjectが作成される。

## ArborEditorウィンドウの未選択メニュー

- ArborEditorウィンドウを開き、グラフを未選択の時に表示されるメニューの「ArborFSM作成」ボタンをクリック
- ArborFSMが追加されている状態のGameObjectが作成される。

## Inspectorウィンドウの”Add Component”ボタン

- HierarchyウィンドウでArborFSMを追加したいGameObjectを選択
- Inspectorウィンドウの”Add Component”ボタンをクリック
- Arbor/ArborFSMを選択。
- GameObjectにArborFSMが追加される。

# Arbor EditorウィンドウでArborFSMグラフを開く

ArborFSMを編集するにはArbor EditorウィンドウでArborFSMグラフを開く必要があります。

- HierarchyウィンドウでArborFSMコンポーネントが付いたGameObjectを選択。
- InspectorウィンドウのArborFSMコンポーネントエディタの”Open Editor”ボタンをクリック。

また、すでにArbor Editorウィンドウが開いている場合はHierarchyウィンドウでArborFSMコンポーネントが付いたGameObjetを選択すると切り替わります。

# ステートの作成

- ノードを作成したいグラフの位置を右クリック
- メニューの”ステート作成”を選択
- ステートの名前を入力し、Enterキーで決定。

# 常駐ステートの作成

- ノードを作成したいグラフの位置を右クリック
- メニューの”常駐ステート作成”を選択
- ステートの名前を入力し、Enterキーで決定。

# ステートの削除

- 削除したいノードを選択
- グラフ内の右クリックメニューから”削除”を選択、もしくはDeleteキーを押す

# 開始ステートに設定

- ノードヘッダ部の歯車アイコンをクリックするかヘッダ部を右クリック
- 「開始ステートに設定」を選択。

# 挙動追加

ステートを動作させるためには、StateBehaviourを追加する必要があります。

- ノードヘッダ部の歯車アイコンをクリックするかヘッダ部を右クリック
- “挙動追加”を選択
- StateBehaviour選択メニューから追加したいStateBehaviourを選択。

# 挙動挿入

StateBehaviourを任意の位置に挿入するには、「挙動挿入」ボタンから追加します。

- ステートの挙動間のセパレータの中央付近をマウスオーバーする。
- 表示された「挙動挿入」ボタンをクリック。
- 「挙動追加」を選択
- StateBehaviour選択メニューから追加したいStateBehaviourを選択。

# 挙動のドラッグ

## 移動

StateBehaviourをドラッグ＆ドロップすることで、挙動の順番の入れ替えや他ノードへの移動ができます。

- 挙動のタイトルバーをドラッグ
- 同じノードの他の位置や他のノードへドロップ

## コピー

Ctrl(Win) / option (Mac)を押しながらドラッグ＆ドロップするとコピーになります。

- 挙動のタイトルバーをドラッグ
- Ctrl(Win) / option (Mac)を押しながら、同じノードの他の位置や他のノードへドロップ

# 挙動の削除

- StateBehaviourのタイトルバーの歯車アイコンをクリックするかタイトルバー部を右クリック
- メニューの”削除”を選択

# ステートの接続

## 既存ノードへの接続

- StateBehaviourのStateLinkフィールドをドラッグ
- 接続先のステートにドロップ

## ステートを新規作成して接続

- StateBehaviourのStateLinkフィールドをドラッグ
- ステートを作成したいグラフ内の位置でドロップ
- メニューの”ステート作成”を選択
- ステートの名前を入力し、Enterキーで決定。

# ステートの接続を切断

- 接続を切断したい接続ライン上を右クリック
- メニューの”切断”を選択

# StateLinkの設定

StateLinkの歯車アイコンをクリックすると設定ウィンドウが表示されます。

項目 | 内容
--- | ---
Name | StateLinkの名前。 入力するとStateLinkフィールドの表示名が変更される。
Transition Timing | 遷移タイミングの設定。
Line Color | 接続ラインの色

## TransitionTiming

項目 | 内容
--- | ---
Late Update Overwrite | LateUpdate時に遷移するよう予約する。 同フレーム内で既に遷移予約されている場合は上書きする。
Immediate | 遷移呼び出し時に瞬時に遷移する。 遷移がループしている場合、無限ループする可能性もあるので使用には注意すること。
Late Update Dont Overwrite | LateUpdate時に遷移するよう予約する。(デフォルト) 同フレーム内で既に遷移予約されている場合は上書きしない。

# リルートノード

ステートの接続ラインを束ねたり方向を変更するにはリルートノードが使用できます。

## 接続

### リルートノードを作成して接続

- StateBehaviourのStateLinkフィールドをドラッグ
- リルートノードを作成したいグラフ内の位置でドロップ
- メニューの”リルート”を選択

### 挿入

- 接続ライン上のリルートノードを作成したい位置を右クリック。
- メニューの”リルート”を選択。

## 方向変更

- 方向を変更するリルートノードを選択
- 表示される方向アイコンをドラッグして方向を変更。

## 接続を保持したまま削除

- リルートノードを右クリック
- 「削除(接続を保持)」を選択。