Arbor: State Diagram Editor

こちらのページは、Arbor 1.7.2以前の旧ページとなります。

1.7.3以降をお使いの方は、新設サイトへ移動してください。

http://arbor.caitsithware.com/

「Arbor: State Diagram Editor」について

  • Unityで有限ステートマシンを使ってゲーム作りたい!
  • だけど、ゲームロジックに依存する挙動は自分でコーディングしたい!
  • そんな時に使えそうな有限ステートマシンの編集ウィンドウと、
    作りたい挙動にあわせてステートのスクリプトを書けるシンプルなステートマシンアセットです。

そもそも有限ステートマシンって何?

  • 有限ステートマシンとは、ある状態での挙動と、その状態から別の状態へ遷移する仕組みです。
  • たとえば、スイッチと電灯。
  • スイッチと電灯にはONとOFFという状態があり、スイッチをONにすれば電灯もONになります。
  • スイッチは押せばONに切り替わり、再度押すとOFFに切り替わる挙動です。
  • 電灯はONであれば明かりを灯す挙動になります。

ゲームでの使いどころ

ゲームの多くは、状態と挙動の移り変わりで表現できてしまうかと思います。
たとえば敵の動きなどは以下のようにすることがあります。

  • 「発生ステート」。
    敵が発生したら発生モーションをとる。
    モーション終了後、「パトロールステート」に遷移。
  • 「パトロールステート」。
    適当に巡回させつつどうしようか考える。
    プレイヤーが近くにいるとき、敵自身のHP高い場合は「追跡ステート」に遷移。
    HP低い場合は「逃走ステート」に遷移。
  • 「追跡ステート」。
    プレイヤーに攻撃できる位置まで移動する。
    攻撃できる位置に到着後、「攻撃ステート」に遷移。
  • 「攻撃ステート」。
    攻撃!
    攻撃モーション終了後、「パトロールステート」に戻る。
  • 「逃走ステート」。
    見つかったプレイヤーから逃げる。
    遠くまで離れたら安心して「パトロールステート」に戻る。

この例では、追跡するか逃亡するかを自分のHPで分岐しています。
たった1箇所での分岐ですが、文章にしてみるとどこでどう繋がっているかすぐには分かりませんね。
ラスボスのような複雑な動きをする場合は状態も挙動も複雑化して、さらに複数のステートマシンが連動する可能性もありえます。
ある時はパトロール、ある時は逃亡、という挙動を細かくスクリプトに、
あとはエディタで遷移の関係を編集する形にしたほうが視覚性が良くなり開発効率も向上するかと思います。

Arborを使えば、このように視覚的に状態の遷移を組むことができます。
Arbor_SS16

ダウンロード

ダウンロードページ

使い方

ArborFSMの追加

  • 適用したいGameObjectを選択
  • 「メニュー > Component > Arbor > ArborFSM」を選択 。
    Arbor_SS01
    あるいはInspectorの「Add Componentボタン > Arbor > ArborFSM」を選択。

Arbor Editorを開く

  • 編集したいArborFSMのOpen Editorボタンをクリック。
    Arbor_SS04
    あるいは「メニュー > Window > Arbor Editor」を選択
    Arbor_SS02

ArborFSMの選択

  • Arbor Editor上部の選択ボックスにドラッグ&ドロップ。
    あるいは選択ボックスをクリックしてリストから選択。
    Arbor_SS03
  • ArborFSMのInspectorでOpen Editorボタンを押した場合は自動的に選択状態になる。

Stateの作成

  • Arbor Editorの適当な位置を右クリック。
  • 「Create State」をクリック
    Arbor_SS05

Stateの名前変更

  • State枠内上部のテキストボックスを変更
    Arbor_SS06

開始Stateの指定

  • State名横の設定アイコンをクリック
    Arbor_SS07
  • 「Set Start State」をクリック。
    Arbor_SS08

 Stateの削除

  • State名横の設定アイコンをクリック
    Arbor_SS07
  • 「Delete」をクリック
    Arbor_SS09

StateにBehaviourを追加

  • State名横の設定アイコンをクリック
    Arbor_SS07
  • メニューの「Add Behaviour」以下から選択。
    Arbor_SS10
  • 設定したいスクリプトファイルを直接ドラッグ&ドロップでもOK

Behaviourの削除

  • Behaviour名横の設定アイコンをクリック
    Arbor_SS11
  • 「Delete」をクリック
    Arbor_SS12

BehaviourからStateへ接続

  • ステート接続エリアから他Stateにドラッグ&ドロップ
    Arbor_SS13
  • 何もないところで離せば解除

パラメータコンテナ(ver 1.7.0以降)

  • 適用したいGameObjectを選択
  • 「メニュー > Component > Arbor > ParameterContainer」を選択 。
    あるいはInspectorの「Add Componentボタン > Arbor > ParameterContainer」を選択。

Arbor_SS18

  • パラメータの追加。
    「Parameters」の右側の+ボタンから、追加する型を選択(Int/Float/Bool)。
  • 編集
    名前、値を選択し編集。
  • パラメータの削除。
    パラメータ右側の-ボタンをクリック。

ステートリスト(Ver 1.7.1以降)

  • ツールバーの「ステートリスト」をクリックすることで開閉。
    Arbor_SS25
  • 左側にステートの一覧が表示されるのでステートをクリックすると選択される。
    Arbor_SS26
  • 検索バーから、名前で検索(一部一致)、挙動の型で検索(全一致)が可能。

コーディング

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

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

ステートの接続

  • 作成したスクリプトにpublicもしくはSerializeField属性をつけたStateLinkを宣言する。
    宣言すれば自動的にArbor Editorで編集可能になる。

    using UnityEngine;
    using System.Collections;
    using Arbor;
    
    public class TestBehaviour : StateBehaviour {
    	public StateLink nextState;
    	// 略
    }
    

    Arbor_SS15

  • 遷移したいタイミングでTransitionを呼ぶ。
    Transition( nextState );
    

エディタ拡張

  • Unityで使用可能なインスペクタ拡張やPropertyDrawerなどがStateBehaviourにも使用できる

参照

Componentリファレンス

組み込みBehaviour

Behaviourリファレンス」参照。

スクリプトリファレンス

 チュートリアル

チュートリアル」参照

サポートフォーラム