現在、有償で配信されていたArborが期間限定で無償配信されているみたいです。
https://www.assetstore.unity3d.com/jp/#!/content/17883
ArborはPlayMakerのようなビジュアル的に状態の管理を行えるアセットです。
・Unityで有限ステートマシンを使ってゲーム作りたい!
・だけど、ゲームロジックに依存する挙動は自分でコーディングしたい!
・そんな時に使えそうな有限ステートマシンの編集ウィンドウと、
作りたい挙動にあわせてステートのスクリプトを書けるシンプルなステートマシンアセットです。
FSMはゲームでよくある「○○をしたら△△を実行する。そのあと××は□□にして、それが終わったら▲▲する。でも▽▽の場合は●●を実行する。その数秒後に最初に戻る」といった、複雑な状態を管理するのに使います。
またビジュアルにデータを管理しギミック部分をメタファイルで管理する事により、必要となるソースコード(自動生成分を含む)の削減が見込める点や、ギミック部分をプログラマー以外が操作しやすくなるといった利点がありそうです。
一番上の動画では、アイテムを取得した際、以下の4つの動きを設定しています。
- 接触したらステート切り替え
- ステート切り替え時にパーティクルを生成(しばらくしたら削除)
- ステート切り替え時に他の他のオブジェクトをONにする
- ステート切り替え時に自オブジェクトをOFFにする
上記の挙動をコードで書くのは大した手間では無いのですが、一つでもアクションが増減するとコードを書く必要が出てくるので、面倒なことになります。こういったケースではメタデータで挙動を制御できるのは便利です。ステージのギミックとか。
また「切り替わる条件」や「切り替わる先」をビジュアルで確認しながら制御できるので、トリガー条件が機能している物に関しては、割と向いてそうな印象です。上のカメラは範囲内に入ったら/出たらカメラの挙動をスイッチします。スイッチ時に現在のステートが色づくのでわかりやすいです。
カメラの挙動に関してはスクリプトで書く必要がありますが、これはむしろ「全機能の挙動をGUIでできる」タイプのシステムが持つ「規模が大きくなると手間が割に合わなくなる」問題の回避として正しい印象なので、この割り切りはどちらかと言うと大賛成です。
ただ、初期で使えるステートは少ないので、プログラムを全く書けない人が初期設定だけで全ての欲しいギミックを作るのは難しいかもしれません。
なおAnimatorのステートマシンと異なり、スクリプトはGameObjectにアタッチされてる扱いなので、MonobehaviourのようにGetComponentを使用して他コンポーネントにアクセス出来るのでイメージしやすくて中々良い感じです。データのシリアライズも出来ますし。
ちょっとだけ気になったのは、現状(2015年8月現在)各ステートが作成したオブジェクトやデータをFSM内に格納する方法が用意されていなかった点です。これが無いのでステート間の連携が若干面倒な事になっています。GetComponentが使えるのでパラメータ格納用コンテナコンポーネントを作ればよいのですが、ユニーク化が常なビジュアルプログラミング環境で汎用データコンテナが無いのは少し勿体ない気もします。
追記:と書いたところ、どうやら作成中だそうで
Arborの汎用データコンテナは現在作成中だったり・・・(ボソ pic.twitter.com/GT6k409pFT
— ケットシーウェア (@CaitSithWare) 2015, 8月 2
またステートの検索が無いので、ステートの量が増えてくると大変な事になる気がします。せめてリスト化する機能があればもっと楽なのですが…。これはUnityのMecanimにも言えるので何ともな処があります。
開発中みたいです。近々のバージョンで追加されるかも
ちなみにステートの検索は出来ませんが、ステートが使用しているスクリプトの検索はHierarchyから出来るので、スクリプトがどのオブジェクトに使われているかを見つけるのは可能です。下の画像によるとFollowTargetを使用しているFSMは二つです。
とりあえずuGUIとArborが連携出来たら、UI制御をステートマシンで制御出来るようになるので、単純なUI遷移や遅延処理が凄い便利に出来そうに見えるのですが、どうやったら良いかなぁ。
ちなみに無料期間はだいたいArborは8月8日くらいまでだそうです。
関連
プロジェクト
動作実験で使用しているプロジェクトを公開しています。ここ
プロジェクト開始時に【Unity】指定のアセットがプロジェクト内に存在しない場合、不足アセット一覧とパッケージへのリンクを表示してくれる効果が発動するアセットを作成した -で必要なアセットをダウンロードします。
実験プロジェクトなので、良い使い方をしているとは限りません(免罪符