敵の攻撃の仕様検討(巫女&築城&防衛ゲーム)
敵の攻撃まわりの仕様を考えてなかったので検討します。
検討というか、思っていることを整理も兼ねて書き出してしまいます。
やりたいこと
敵の攻撃について
まず敵が攻撃する場合を列挙すると
- 攻撃対象のユニットが射程内にいて、射線が通るとき。
- 移動経路上に建物や壁があって、射線が通るとき。
- 攻撃されて対象に反撃するために移動して攻撃するとき。
となります。
気にしているのは「経路上の建物や壁を攻撃するとき」と、ちょっと細かいのですが「建物や壁から攻撃してきた相手に反撃するとき」です。
建物や壁からの攻撃と反撃
まず、味方部隊は櫓や壁のあるブロックに配置されたときには、その建物や壁から攻撃できるものとします。
そして、敵は反撃するときと経路上の建物や壁以外は動的に攻撃しないことにします。(何もしてこない建物は無視する)
あと、味方部隊が建物から攻撃するときの攻撃位置は下図の赤点の位置にします。
↓ 攻撃する側のブロックの端の位置から攻撃する、の図
反撃してくる敵が遠距離攻撃で射線判定するのもここです。
「この建物に反撃する」と決めたときに、建物の最下層のブロックの外側の面と順に射線判定します。
ただし「土塀の狭間からは真下を狙えない」という制限も実現したいので、土塀越しに攻撃する際には図の右側の方向から 45 deg の範囲までしか攻撃できないことにします。
櫓系の建物の場合は「石落としがあるから角度制限なく狙える」ということにします。小難しいですね。
↓ 土塀の狭間からの攻撃範囲が狭くて石垣の場合は真下を攻撃できないという図
経路上の建物や壁を攻撃する
基本的に敵は攻撃されなければ建物や壁を自分からは攻撃しないのですが、門などの最短経路上にある建物については移動先にあれば攻撃するようにします。これは遠距離ユニットの場合でも壁の眼の前まで移動してから攻撃させます。
ただし、門が櫓門でそこに部隊が配置されていて攻撃してきたときは、それは反撃の対象になるので遠距離ユニットは門を遠くから攻撃します。
小難しいですね。
攻撃の種類
そして、攻撃を実際にどう実装するかを考えます。
概要だけ書くと
- 味方部隊のユニットからの攻撃 ... 移動しない限りはどこを攻撃できるかは射程によって決まるので、移動しなくなったときに射程内のグリッドに対して「このグリッド上は攻撃できる」という射線判定をして結果をキャッシュしておき、そのグリッドに移動したきた敵を取得できるようにする。
- 自キャラの随伴ユニットからの攻撃 … 常に動いているとみなして、KDTree で動的に近い順に攻撃対象を取得して射線が通れば攻撃する。
- 遠距離攻撃の敵キャラの場合 … KDTree で動的に攻撃対象を取得して射線判定して攻撃する。
- 近接攻撃の敵キャラの場合 … 自分のいるグリッドの移動先のグリッドに敵や建物があれば攻撃する。
- 攻撃されて反撃中の敵キャラの場合 … 近い場合には移動目標を拠点からその対象に変更する。後でまた考える。
です。
概要じゃないし小難しいな…
いろいろ書きましたが、とりあえずは近接敵の攻撃だけが実装できればいいと思っています。順に実装していきます。
まとめと今後の予定
いろいろ書き出してみましたが、まだ整理しきれてないというか、どうするか決めきれてないのがわかりました。基本的な攻撃だけを実装して、後はユニット数を増やして処理負荷を評価しながら機能追加していこうと思います。また後で検討します。
次回は、地面の高さを変えたり、建物の建築と撤去まわりを前プロジェクトの実装を見ながら作ったり、セーブとロードまわりを実装しようと思います。がんばります。