敵AIとビジュアルスクリプティング

経緯

アクションゲームなど敵のAIが必要なケースは多々あります。
その際、FSMやビヘイビアツリーなどといった考え方を用いて実装する方法が一般的だと思います。
そういったアセットが多々あり、ビジュアルスクリプティングでAIを作るということはよく取られる手法です。
私が好きなアクションゲームの Hollow Knight はFSMを実装できるPlaymakerで敵AIを作っているらしく、私もそれに習ってPlaymakerで実装を始めました。
しかし、これが私に合わなくて、採用できなかったのでそのことを書いておきたいと思います。

ビジュアルスクリプティングでAIを作るということ

個人的につらかったのは以下の点です。
敵AIの挙動を考え、プログラムで実装する方法を考えます。
その方法を思いついたあとに、これをPlaymakerで実装するにはどうしたら良いのかさらに考えないといけないのです。
プログラムで普通に実装するならイメージできるのですが、Playmaker上で再現する方法がパッと出てこないということが多々ありました。
Playmakerで敵AIを作る動画などを観ても、なんとなく二度手間というか、思考のロジックが自分に合っていないような気がします。
急がば回れでビジュアルスクリプティングで敵AIを作る環境をちゃんと整えれば最終的な効率が上がるのか?とも思いましたが、私は断念してしまいました。

結果

UnityのFSMの実装でポピュラーな以下のコードが公開されています。
thefuntastic / Unity3d-Finite-State-Machine
敵ごとにこの実装を用いて、敵AIを作ることにしました。
コードベースなのでGitでdiffも見やすいし、ダイレクトに書けるので性に合っていると感じました。

Unityカテゴリの記事
Color SpaceがLinearのときUIの透明度が正しくならない
History Inspectorの紹介
History Inspectorの紹介
Chronosを使った感想
コンポーネントの順番をスクリプトから並び替える
Smart Inspectorの紹介
Kris' Favorite Assets が便利
キー操作でUIのナビゲーションをループさせる
TextMeshProのSprite Assetを更新する
UnityPhysicsDebugDraw2D が便利
色管理を考える
細かいTips
ビルドスクリプトを書く
AnimatorのCulling Modeでハマった話
Vectrosityを使ってUGUI上で線や円のアニメーションをする
スプレッドシートからjsonデータを読み込む
ビジュアルノベルアセットFungusにコマンドを追加してカスタマイズする
Skinned Mesh Renderer の Boundsについて
シーンごとにビルド結果の容量を出す
シーンビューにクオリティ設定のスライダーを出すエディタ拡張
ビルド結果のFile headersが大きい理由
フリーのビジュアルノベルアセットFungusを使ってRPGのイベントを作る
Move To View を改良する
フリーのビジュアルノベルアセットのFungusが便利
Visual Studio で保存時にフォーマットする
スプレッドシートからデータを読み込む
Easy Save2 で シリアライズされたクラスを保存する
ShaderでSpriteの色相をシフトする
Sprite、Texture の 色相をシフトする
uGUIのButtonをクリック時にハイライトのままになる
uGUIのCanvas Groupを使って透過処理をしたり、操作を制限する
自作のコンフィグ画面に必要なもの
uGUIでトグルなボタンを作る
uGUI で動的にボタンを作る
Easy Save2 を使ってみる
csv読み込んで ローカライズ
LoadLevelAdditive で共通シーンを加算
画面全体に色をかける
Any State でどこからでも遷移できるようにする
iTween のStop ではまる
sprite の multiple で 境界がおかしくなる
2D画面に線を引く Line Renderer
Renderer の Materials を スクリプトから設定する
背景をスクロールさせる