【TopDown Engine】敵キャラを走らせる方法(CharacterRunの使い方)

スポンサーリンク
CharacterRun TopDownEngine
スポンサーリンク

前書き

TopDownEngineに含まれるデモ用の敵キャラクターを見てみると、「CharacterRun」という移動系アクションアビリティが設定されています。

プレイヤーの場合は スペースキーを押しながら移動するとRun状態 に切り替わりますが、敵キャラクターには当然スペースキーを押す入力が存在しません。そのため、デフォルトのままでは敵AIに走らせることができない という問題が発生します。

本記事では、AIキャラクターにRunを実装する方法と注意点を解説していきます。サンプルとして、デモに含まれている KoalaNinja を対象に設定していきます。

Character Runとは

CharacterRunは、TopDownEngineにおける キャラクター移動系アビリティ の一つです。
その役割はシンプルで、歩き速度(WalkSpeed)と走り速度(RunSpeed)を切り替える 仕組みを提供します。

  • 通常は歩き速度(WalkSpeed)
  • 走り状態ではRunSpeedに切り替え
  • 切り替えはCharacterRunコンポーネントのRunStart() / RunStop()で行う

プレイヤーキャラクターでは入力に応じて自動的に切り替わりますが、AIの場合は コードやAI Brainから手動で呼び出す必要 があります。

敵キャラクターにCharacterRunを追加する

まずは敵キャラクターのPrefabにCharacterRunを追加します。

  1. 敵キャラPrefabを選択
  2. CharacterRunコンポーネントを追加
  3. 設定を確認
    • Run Speed:走るときの速度(歩く速度に依存しない)

この時点で準備完了です。次に、AI側からRunを制御できるようにします。

今回はDemoにあるKoalaNinjaを使って説明していこうと思います。

AIで走りを制御する方法

AIキャラクターの場合、AIBrainのステートに応じてRunStart / RunStopを呼び出す必要があります。

基本的な流れ

  • ターゲットに接近中:RunStart(走る)
  • ターゲット探索中や待機中:RunStop(歩く)

これを実現するために、以下のアクションを利用します。

  • AIActionRunStart:Run開始を指示するアクション
  • AIActionRunStop:Run終了を指示するアクション

AIBrainで上記のアクションを設定してみましょう。設定方法は以下になります。

  1. キャラクターアビリティ「AIActionRunStart」と「AIActionRunStop」を追加する
  2. AIBrainのMovingで「Actions」ステートにRunStartを呼ぶアクションを追加する
  3. AIBrainのDetectingで「Actions」ステートにRunStopを呼ぶアクションを追加する

上記の設定をすることで敵に近づくときはRunを行う、敵を捜索中の時はRunをやめるっといった動きになります。

この状態でさっそく動かしてみましょう。・・・ここまでの設定で一見正しく動作しそうですが、実際に試すと 移動速度がRunSpeedに切り替わらない という現象が発生します。

上記の方法では動かなかったのでちょっと修正

上記の設定でやってみるとなぜかAIBrainはRun状態になりますが、敵キャラの移動速度は速くなってないと思います。CharacterRunスクリプトを見てみるとRunをする条件に

現在のキャラクタのステータスがWalkを実行していること

という条件分岐がありました。
そのため、いきなりIdle(待機)状態からRun状態に移行することはできなく、必ず

Idle → Walking → Run という段階を踏む実装になっていました。

よって、まずは一定時間Walkingを行ってからRunに移行するようにAIBrainも設定する必要があります。

AI Brainをちょっと変えてみました。新しくAIDecisionTimeInStateとRunningというステートを追加しました。AIDecisionTimeInStateは一定時間が経ったらTrueを返すscriptになります。今回は一定時間Walkを実行した後にRunを実行するという条件を作りたいため追加しました。

設定例:

  1. Movingステート に AIDecisionTimeInState を追加
  2. AIDecisionTimeInState がTrueになるときにRunning移行するよう設定
  3. Runningステートを作成し、以降はRunStartを実行

上記のAIBrainの設定で動かしてみました。1秒間Walkをした後、Runningを実行していることがAIBrainから分かります。またRunningに移行したタイミングでKoalaNinjaの移動速度が速くなりました。

検証:どのくらいWalkingすればRunできる?

いろいろ時間を変更してみましたが、0.1secではRunに移行せず、0.2secだとRunに移行することが分かりました。今回は0.1sec刻みでしたが0.01とかさらに時間を刻むことで突き詰められるかなと思います。

応用例

今回は単純にプレイヤーを見つけたらRunに移行するというAIBrainを考えましたが他にも以下のようなAIBrainが作れるかなと思います。

  • 突進攻撃:接近ステートでRunStartし、距離が詰まったら攻撃
  • 逃走AI:体力が一定以下になったらRunStartで逃げる
  • ランダム速度変化:一定時間ごとにRunStartとRunStopを繰り返す

トラブルシューティング

RunStart/RunStopを追加したけど上手く動かない!っといったことがあると思いますがだいたいは以下のような対応で直るかなと思います。

走らない

  • Walkを行わず、いきなりAIActionRunStartを実行している。
  • AIActionRunStartがAIBrainで呼ばれない。

常に走りっぱなし

  • RunStopが呼ばれているかチェック

まとめ

CharacterRunはAIキャラクターにも簡単に走る動作を付与できる便利なアビリティです。
プレイヤーと違い、AIでは明示的なRunStart/RunStopの呼び出しが必要ですが、これを覚えると突進攻撃やスピード変化のある敵を簡単に作れます。ポイントとしては

  • CharacterRun はAIキャラクターでも使用可能
  • ただし RunStart/RunStopの明示的な呼び出し が必要
  • Idleから直接Runには移行できないため、必ずWalkを経由させる必要がある
  • AIDecisionTimeInState を使えば、一定時間Walk後にRunへ移行できる
  • 応用次第で突進・逃走・速度変化など多彩なAI挙動を作成可能
  • プレイヤーキャラと同様に、Animatorで走りモーションを設定するのも忘れずに

案外簡単な設定になりますのでまだ設定したことがない方はこの機会にCharacterRunを実行してみてください!

コメント

タイトルとURLをコピーしました