前書き
TopDown Enginの場合は”AI Brain”というコンポーネントを使用してAIの行動を決定しています。コーディングなしで実装できる反面、どのように”AI Brain”が作られているのか理解する必要があります。
感覚的に設定することができるため、Demoを見ながら理解していただければと思います。
AIの実装方法
Characterの属性をAIにする
Characterスクリプトの中に”Character Type”があるため、”AI”に設定します。
また、”AI”の”Character Brain”がありますが、”AI Brain”スクリプトを”Character”スクリプトと同じ階層に実装することで自動で設定されるため”None”のままで問題ありません。
AI Brainスクリプトを追加する
“AI Brain”スクリプトを”Character”スクリプトと同じ階層に実装します。
AI Brainの作り
”AI Brain”を設定する場合、
- Actions
- Transitions
の2つを設定する必要があります。
Actionsについては”AIActionXXX~”、Transitionsについては”AIDecisionXXX~”のスクリプトが対応するため、事前に設定する必要があります。ActionsとTransitionsに設定できるスクリプトに何があるかは公式Documentからご確認ください。
# 今回はKoalaNinjaを参考にしています。
“Actions”と”Transitions”の組み合わせたブロックを複数作ります。
ブロックの分け方としては”索敵中”、”移動中”、”攻撃中”といった粒度で分けるのが簡単かなと思います。ただし「索敵しながら移動する」や「移動しながら攻撃をする」といったことも可能ですので、実装したい敵に応じて変えていただければ大丈夫です。
# KoalaNinjaの場合は”索敵中”、”移動中”のみになります。
“Actions”と”Transitions”については事前に設定した”AIActionXXX~”と”AIDecisionXXX~”から選択することができます。
“Transitions”の”TrueState”と”FalseState”に次の遷移先を文字列で設定します。遷移先については”State Name”で設定した文字列と同じものを格納します。
Transitionsで設定した各スクリプトを見るとTrueで終了する条件とFalseで終了する条件があります。
以下の例でいうと”AIDecisionDetectTargetRadius2D”は「指定した存在が指定の範囲内にある場合はTrueを返す」という作りになっているため、Detectiongでの意味としては「指定の範囲内にプレイヤーキャラクタがいたら移動する(Moving)、いない場合は索敵を続ける(空欄)」になります。
# 空欄の場合は遷移せずに同じActionsを繰り返すという意味になります。
KoalaNinjaのAIについて
上記を踏まえてKoalaNinjaのAIは何をしているかというと
- Detecting:プレイヤーを索敵
Actions:何もしない
Transitions:プレイヤーが指定の範囲内にいたらMovingに遷移する
# プレイヤーが範囲内にいなければ止まったままになります。 - Moving:移動
Actions:プレイヤーに向かって移動する
Transitions_1:プレイヤーが指定の範囲内にいなければDetectiongに遷移する
Transitions_2:プレイヤーが存在しなければDetectiongに遷移する
# プレイヤーが範囲内にいて、存在する限りずっと追いかけ続けます。
まとめ
今回は敵AIの実装方法について紹介しました。
最初はいろいろあるActionsとTransitionsのスクリプトを見て難しいなと思いますが、慣れてくると組み合わせで行けるため簡単に実装できると思います。まずはDemoにある敵AIをガチャガチャ動かしてみて理解を深めていっていただければよいかなと思います。
コメント