【ゲーム開発】プレイヤーAIを制御する方法の紹介
こんにちは、トイロジック プログラム課で『グリッチバスターズ:スタックオンユー』プレイヤーAI周りのプログラムを担当しました。本記事では、『グリッチバスターズ:スタックオンユー』のプレイヤーAIを制御する方法についてご紹介したいと思います。
プレイヤーAIで実現できたこと
『グリッチバスターズ:スタックオンユー』は最大4人まで同時にプレイできるゲームです。もしプレイヤーが足りない場合は、AIボットと一緒にプレイすることができます。AIボットはプレイヤーの指示を理解し、協力してチームプレイを行います。また、プレイヤーからの指示がない場合でも、周囲の要素を分析して最適な行動を行うことが実現されています。
例えば、高い場所に行きたい場合は、AIボットに「集まれ」という命令を発令すると、AIボットが合体し、プレイヤーはその上に乗って高い場所に行けるようになります。周りに敵が存在する場合は、プレイヤーから指示しなくても、AIボットは周りに最適な位置に移動して、敵を攻撃します。
以上のように、AIボットがプレイヤーと連携し、状況に応じて適切な行動を取ることで、よりスムーズで楽しいゲームプレイが実現できました。
プレイヤーAIを制御する方法
まず、画像のようにAIを「上層」と「下層」に分けるようにしました。「上層」部分はAIのステートを管理しています。具体的には、ステートの開始処理、更新処理、終了処理、および該当ステートへの遷移の可否処理を行います。この部分はステート制御に関連する処理のみを行うため、ファイナイトステートマシン(FSM)を利用しました。
一方、「下層」部分は、AIのステートがアクティブしている間に行う具体的な挙動を実現します。この部分は「上層」より複雑な処理が多く、頻繁に調整する可能性が高いため、ビヘイビアツリー(BT)を利用するようにしました。
「上層」と「下層」に分けることで、ステート制御と具体的な挙動の管理を効率的に行うことができます。FSMとBTの組み合わせは、AIの制御を柔軟かつ効果的に行うために適しています。
具体例を挙げて説明します
具体例として、画像のようにステートから「移動」ステートに変換する場合は、「上層」部分はまず「遷移できるかどうか判断する」処理を行います。もし条件が足りないと、「遷移失敗」処理を実行します。一方で、条件をすべて満足したら、「ステート遷移」処理が行われます。「ステート遷移」処理の中身では、まず「待機」ステートの終了処理を行った後、ステートを切り替えて「移動」ステートの開始処理を行います。このように、「ステート遷移」はステートの切り替えとその前後の処理を制御します。
「下層」部分のビヘイビアツリーは「上層」と連動しています。具体的には、ステート開始時にビヘイビアツリーのブラックボードに通知が送られ、関連するノードがアクティブになり、具体的な挙動を実行します。そして、ステート終了時には関連パラメータを初期化するような形になります。
これにより、「上層」と「下層」が連携して、AIは適切な条件でスムーズにステート間を遷移し、各ステートで適切な挙動を行うことができるようになります。
最後に
簡単ですがプレイヤーAIを制御する方法について紹介しました。いかがでしたでしょうか。AI制御に関して、FSMとBT以外の方法にもたくさんありますが、次の機会がありましたらご紹介させていただきたいと思います。
トイロジックでは現在、一緒に働くプログラマーを募集しています。
不明点などもお気軽にお問い合わせください。ご応募お待ちしております!
#プログラマー #ゲーム #ゲーム制作 #ゲーム開発 #ゲーム会社 #アクション #AI #プログラム