Top > C88-敵AI
#contents &ref(c88-ai_all.png,,20%); * 概要 [#q03f8336] - 敵の挙動。ビヘイビアツリーで構築。 - 大抵の障害物や壁のチェックは「LineTrace By Channel」や「CupsuleTrace By Channel」でやってる - EQS使おうとしたけど、一回試して上手く動かなかったので断念 - マスター予定日当日に調整してたのもあって、途中からかなり雑に。 &ref(c88-ai_task_01.png,,50%); - ServiceとTaskはどれも大きいBPになったので今回はスクリーンショット割愛……需要あれば作ります * Blackboard [#a33f61f2] &ref(c88-ai_blackboard_02.png,,70%); - AIControllerの「Event Tick」からBlackboardに相手のactorと射程範囲チェックを設定 -- Serviceでやっても良かった。 * Service [#pb971504] ** HandgunCheckService、MissileCheckService [#sfdfd66d] - ハンドガン、ミサイルで撃たれているかをチェックするサービス。 + 「Get All Actors with Interface」等でリストを全部取得。 + actorの所属グループを観て敵が発射したものを収集 + 一番近い弾を避ける対象の弾としてBlackboardに保存 -- 弾と自身の射線上に障害物(背景)がある場合は除外する(「LineTraceByChannel」でテスト) ** AttackShortService、AttackLongService [#n7e1b36b] - 近距離、遠距離用攻撃サービス + 「Event Receive Activation」でアクティブになったタイミングで、短距離、遠距離武器の発射ボタンを押し始める + 「Event Receive Deactivation」でサービスを抜けるタイミングで、短距離、遠距離武器の発射ボタンを離す ** BoostUseService [#b32b30ef] - ブーストボタン押しサービス + 「Event Receive Activation」でアクティブになったタイミングで、ブーストボタンを押す + 「Event Receive Deactivation」でサービスを抜けるタイミングで、ブーストボタンを離す + 「Event Recieve Tick」でブーストゲージが指定以下になったらブーストボタンを離す。一定以上回復したら再度押す。 * Task [#u8515aee] ** AvoidMissile [#w93dc224] - ミサイル回避挙動。大抵迂回して飛んでくるので横に避けつつ、通り過ぎると反転まではしないので前進して回避する。 + 自身から見て、敵との方向から垂直方向(左右)に回避する + 自身の右方向と左方向に避ける際、回避すべきミサイルから遠い方に回避 + 合わせて正面へ向かう -- ハンドガンで撃たれてたら前進は控えめに ** AvoidHandgun [#n9a14bee] - ハンドガン回避挙動。左右に避けるのが一番。 + 自身から見て、敵との方向から垂直方向(左右)に回避する + 左右の壁との距離を計測。どっちかの壁が近ければ、広い方に避ける。 -- 壁が近い方に避けると身動きが取れなくなる -- 両方と壁が近い場合はどうしようもないのでどっちかに。 + 左右どっちも広ければ、左右の移動先から相手へ攻撃できる方へ避ける * 近距離 [#q74ea659] ** 仕様 [#r1b237f0] - 近距離範囲内 -- ハンドガンで撃たれているかをチェックする -- ミサイルで撃たれているかをチェックする -- 近距離用の攻撃セットを実行 -- 移動行動 --- ミサイルで撃たれていればミサイル用の回避行動をとる。+ブースト使用。 --- ハンドガンで撃たれていればハンドガン用の回避行動をとる。+ブースト使用。 --- 遠距離よりもゲージギリギリまでブースト使いつつ避ける。 --- 相手を狙いつつ現状維持行動 --- 相手に近づく ** ビヘイビアツリー [#c30020d3] &ref(c88-ai_short_01.png); - Blackboardの「Is Short Length」(近距離範囲内か)がtrueなら入る - サービスとして近距離範囲内では常時動かしたい処理を回す。 -- 「HandgunCheckService」ハンドガンで撃たれているかチェック -- 「MissileCheckService」ミサイルで撃たれているかチェック -- 「AttackShortService」近距離用の攻撃 &ref(c88-ai_short_02.png,,60%); - 優先順位として、 ++ ダメージの大きいミサイル回避 ++ ハンドガン回避 ++ ここに来ると狙われていないので適当な平行移動 ++ 左右に回避したら敵を狙えなければMoveToで近づく ++ 最後ここまで来てスルーすると近距離行動以外のノードに行ってしまうので、ここで終わらせる。強制的にSuccessを返す。 * 遠距離 [#q74ea659] - 近距離とほぼ一緒。近距離用の動作が遠距離になったり、パラメーターが一部違うだけ。 &ref(c88-ai_long_01.png); &ref(c88-ai_long_02.png,,60%); * 難易度調整 [#e39052c4] - ミッションによって難易度付け。簡素な実装だけ入れた。 -- 1 - チュートリアル、2,3 - 弱い、4, 5, 6 - 普通 + ハンドガン、「弱い」以下の場合は一定間隔でランダムに射撃を止めたりする + ミサイル、「チュートリアル」の場合は近距離に入った際に射撃を止める * 感想 [#c1690992] - 明らかに時間不足感が…… - 明らかに時間不足による調整不足感が…… - もうちょっと地形を考慮したりする戦い方をしたかった |