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