Top > C88-敵AI

c88-ai_all.png

概要

  • 敵の挙動。ビヘイビアツリーで構築。
  • 大抵の障害物や壁のチェックは「LineTrace By Channel」や「CupsuleTrace By Channel」でやってる
  • EQS使おうとしたけど、一回試して上手く動かなかったので断念
  • マスター予定日当日に調整してたのもあって、途中からかなり雑に。

c88-ai_task_01.png

  • ServiceとTaskはどれも大きいBPになったので今回はスクリーンショット割愛……需要あれば作ります

Blackboard

c88-ai_blackboard_02.png

  • AIControllerの「Event Tick」からBlackboardに相手のactorと射程範囲チェックを設定
    • Serviceでやっても良かった。

Service

HandgunCheckService、MissileCheckService

  • ハンドガン、ミサイルで撃たれているかをチェックするサービス。
  1. 「Get All Actors with Interface」等でリストを全部取得。
  2. actorの所属グループを観て敵が発射したものを収集
  3. 一番近い弾を避ける対象の弾としてBlackboardに保存
    • 弾と自身の射線上に障害物(背景)がある場合は除外する(「LineTraceByChannel」でテスト)

AttackShortService、AttackLongService

  • 近距離、遠距離用攻撃サービス
  1. 「Event Receive Activation」でアクティブになったタイミングで、短距離、遠距離武器の発射ボタンを押し始める
  2. 「Event Receive Deactivation」でサービスを抜けるタイミングで、短距離、遠距離武器の発射ボタンを離す

BoostUseService

  • ブーストボタン押しサービス
  1. 「Event Receive Activation」でアクティブになったタイミングで、ブーストボタンを押す
  2. 「Event Receive Deactivation」でサービスを抜けるタイミングで、ブーストボタンを離す
  3. 「Event Recieve Tick」でブーストゲージが指定以下になったらブーストボタンを離す。一定以上回復したら再度押す。

Task

AvoidMissile

  • ミサイル回避挙動。大抵迂回して飛んでくるので横に避けつつ、通り過ぎると反転まではしないので前進して回避する。
  1. 自身から見て、敵との方向から垂直方向(左右)に回避する
  2. 自身の右方向と左方向に避ける際、回避すべきミサイルから遠い方に回避
  3. 合わせて正面へ向かう
    • ハンドガンで撃たれてたら前進は控えめに

AvoidHandgun

  • ハンドガン回避挙動。左右に避けるのが一番。
  1. 自身から見て、敵との方向から垂直方向(左右)に回避する
  2. 左右の壁との距離を計測。どっちかの壁が近ければ、広い方に避ける。
    • 壁が近い方に避けると身動きが取れなくなる
    • 両方と壁が近い場合はどうしようもないのでどっちかに。
  3. 左右どっちも広ければ、左右の移動先から相手へ攻撃できる方へ避ける

近距離

仕様

  • 近距離範囲内
    • ハンドガンで撃たれているかをチェックする
    • ミサイルで撃たれているかをチェックする
    • 近距離用の攻撃セットを実行
    • 移動行動
      • ミサイルで撃たれていればミサイル用の回避行動をとる。+ブースト使用。
      • ハンドガンで撃たれていればハンドガン用の回避行動をとる。+ブースト使用。
      • 遠距離よりもゲージギリギリまでブースト使いつつ避ける。
      • 相手を狙いつつ現状維持行動
      • 相手に近づく

ビヘイビアツリー

c88-ai_short_01.png

  • Blackboardの「Is Short Length」(近距離範囲内か)がtrueなら入る
  • サービスとして近距離範囲内では常時動かしたい処理を回す。
    • 「HandgunCheckService」ハンドガンで撃たれているかチェック
    • 「MissileCheckService」ミサイルで撃たれているかチェック
    • 「AttackShortService」近距離用の攻撃

c88-ai_short_02.png

  • 優先順位として、
    1. ダメージの大きいミサイル回避
    2. ハンドガン回避
    3. ここに来ると狙われていないので適当な平行移動
    4. 左右に回避したら敵を狙えなければMoveToで近づく
    5. 最後ここまで来てスルーすると近距離行動以外のノードに行ってしまうので、ここで終わらせる。強制的にSuccessを返す。

遠距離

  • 近距離とほぼ一緒。近距離用の動作が遠距離になったり、パラメーターが一部違うだけ。
    c88-ai_long_01.png
    c88-ai_long_02.png

難易度調整

  • ミッションによって難易度付け。簡素な実装だけ入れた。
    • 1 - チュートリアル、2,3 - 弱い、4, 5, 6 - 普通
  1. ハンドガン、「弱い」以下の場合は一定間隔でランダムに射撃を止めたりする
  2. ミサイル、「チュートリアル」の場合は近距離に入った際に射撃を止める

感想

  • 明らかに時間不足による調整不足感が……
  • もうちょっと地形を考慮したりする戦い方をしたかった

添付ファイル: filec88-ai_blackboard_02.png 322件 [詳細] filec88-ai_task_01.png 600件 [詳細] filec88-ai_short_02.png 345件 [詳細] filec88-ai_short_01.png 351件 [詳細] filec88-ai_long_02.png 319件 [詳細] filec88-ai_long_01.png 326件 [詳細] filec88-ai_all.png 908件 [詳細]

リロード   新規 編集 凍結 差分 添付 複製 名前変更   ホーム 一覧 単語検索 最終更新 バックアップ リンク元   ヘルプ   最終更新のRSS
Last-modified: 2015-08-25 (火) 02:37:28 (3161d)