# StateBehaviour

StateBehaviourをカスタマイズするには、StateBehaviour用のスクリプトファイルを作成し、行いたい処理を記述する必要があります。

## StateBehaviourスクリプトファイルの作成

- Projectウィンドウから作成したい場所で右クリック。
- 右クリックメニューから、「Create > Arbor > StateBehaviour C# Script」を選択。
- ファイル名を入力して決定

## 呼び出される関数

作成したStateBehaviourをArborEditorにてステートに割り当てると、スクリプトの各関数が呼び出されるようになります。

- OnStateAwake
  初めてステートに遷移してきたときに呼ばれます。
- OnStateBegin
  ステートに遷移してきたときに呼ばれます。
- OnStateUpdate
  ArborFSMのUpdate()のタイミングで呼ばれます。
  毎フレーム呼ばれるかどうかはArborFSMのUpdate Settingsに依存。
- OnStateLateUpdate
  ArborFSMのLateUpdate()のタイミングで呼ばれます。
  毎フレーム呼ばれるかどうかはArborFSMのUpdate Settingsに依存。
- OnStateEnd
  ステートから離れるときに呼ばれます。
- MonoBehaviourのメッセージ関数
  詳しくはUnity ScriptReferenceのMonoBehaviourのMessagesを参照してください。

### 注意点

- MonoBehaviourのenabledは実行制御のために内部で使用しているため、代替となるbehaviourEnabledを使用してください。

## 呼び出し順

- OnStateAwake/OnStateBegin/OnStateUpdate/OnStateLateUpdate/OnStateEndはArbor Editorでのステートノードに追加されている上から順に呼ばれます。
- MonoBehaviour関連はUnityによる実行順にしたがって呼び出されます。
  詳しくはUnity Manualの イベント関数の実行順 を参照してください。

## 変数とArbor Editor

作成したスクリプトにpublicもしくはSerializeField属性をつけた変数を宣言することでArbor Editorで編集可能になります。

    1
    2
    3
    4
    5
    6
    7
    8
    using UnityEngine;
    using System.Collections;
    using Arbor;

    public class TestBehaviour : StateBehaviour {
    	public string myName;
    	// 略
    }

## ステートの接続

### フィールドの追加

作成したスクリプトにpublicもしくはSerializeField属性をつけたStateLinkを宣言することでArbor Editorで接続スロットが表示されるようになります。

    1
    2
    3
    4
    5
    6
    7
    8
    using UnityEngine;
    using System.Collections;
    using Arbor;

    public class TestBehaviour : StateBehaviour {
    	public StateLink nextState;
    	// 略
    }

### 接続先への遷移

遷移したいタイミングでTransitionを呼ぶと遷移できます。

    1
    	Transition( nextState );

## データフロー

StateBehaviourではデータフローによる値の入出力が可能です。

詳しくは、「スクリプティング : データフロー」を参照してください。

スクリプティング : データフロー