Machines)を作成してゲーキャラクターの制御を行ったので実装例を紹介したいと思います。「階層型のステートマシン」なんて言ったりもします。有力なゲームエンジン(UnityやUE4)であればHFSMと同等の機能として「ビヘイビアツリー」がなんとUIエディタ付きで提供されているため、ゲームエンジンI制御に於いては、独自に実装する機会は無いのかと思います。いった機能がサポートされていない環境(例えば自作エンジンや、Cocos2d-xなど)でキャラクターのAI制御を行うため実装の必要だったので実装しました。以下実装した時のキャラクターの動きになります。今回参考として実装する状態遷移は以下の通りです。階層型にしないと戦闘状態に移行する判断を巡回状態の2つが重複して考慮することになる場合があり、コードが重複してしまいます。2つくらいならまだ大丈夫ですが、10個、20個と状態が増えるとかなりツラくなっていきます。従って、HFSMでは共通の判断は上位状態を用いて制御し、子要素は個別の処理に専念するように実装していきます。使い方では、早速実装をしていきたいと思います。FrameworkのC#で実装していきます。実装完了後の使い方から説明したいと思います。(今の時点では意味不明だと思いますがこんな風になりますよ的な意味で。}}状態を組み立て後はExecuteをフレームごとに呼び出せば処理が完了します。状態を表す基底クラス全ての状態の元になる抽象クラスの実装です。デザインパターンのセオリー通り、操作として、状態に入る時、出る時、状態中の動作を抽象メソッドとして定義し、階層型状態マシンなので自分自身の状態の変更と、子要素の状態の変更の2つのメソッドを実行しています。状態を変更する時に、自分の子要素を全て集めて末端の状態から退場動作を行います。現在の子状態を取得します。状態遷移が制御する対象のモデルを表すクラスです。今回は以下の通り定義します。重要なのは、状態遷移時に実際に実行する動作をこのクラスに記述することです。口述の個々の状態クラス内にモデルの具体的なモデルの動作や主要な判断を記述しないように注意します。現在、ジェネリックを状態クラスで宣言していますが、多様性を確保する方針は、ジェネリックではなくインターフェースのほうが良いかもしれません。}}個別の状態遷移クラスの記述まず、各状態に対応する列挙子を定義します。これを定義する事で状態を示すことができます。Attack,}次に各々の状態クラスの実装になります。物凄い長いので個々の処理をある程度省略しているので全体の流れだけになります。基本的に状態の遷移動作のみを記述し、具体的な動作や判断はModelクラスで行います。}}実際の実装時はかなり複雑になると思いますが、基本的な流れはこんな感じになります。»Profile受託ソフト会社員でWin系業務屋。趣味でCocos2d-x/C++を触っています。etc...主に受託・開発ネタ、Windowsの事、Srellaris、ゲーム制作の進捗の事を喋ります。ArticleC#で2次元配列を管理するクラスを作成する【C#】2次元配列から2次元配列を切り出すC#でオブジェクト初期化子を使った時の丸カッコの有無DOTweenのアニメーションをTimeLineでプレビューするC#の配列をインデックス付きforeachするスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。