2014年1月18日土曜日

【Unity】RTS:攻撃グループの編成

突撃する攻撃グループと待機する予備戦力のグループ
AIが局所の状況を判断できるようにセンサー類を実装した。またこれまでAIは指揮下のユニット全てに指示を出していたが、これを任意のユニットに指示を出せるように改良した。

 
 AIはOverLapSphereを用いて1)任意の地点から一番近い敵・味方ユニットの検索、2)任意の敵ユニット周辺の他の敵ユニットの検索と戦闘力の合算が可能になった。これで攻撃目標を選定したり、麾下からどれだけの戦力を割いてぶつけるべきかを判断できる。

 指揮下のユニットの状態は4秒毎に報告されていて、その中には戦闘力、移動中や攻撃目標の割り当ての有無がある。AIはこれを用いて任務割り当てのないユニットを選び出し合計の戦闘力が要求を満たすようにしたグループを編成できるようになった。要求の戦闘力を満たせない場合は作戦は放棄される。

 今後の課題には以下の様なものがある。

・射程による条件と慎重な攻撃
グループを編成するとき条件に戦闘力だけでなく、射程も要求できるようにする。これ自体はユニットの種類から十分可能だ。また戦闘グループは射程を活かし射程ギリギリから敵を狙撃できるようにしたい。この場合グループ内の長射程のユニットが発砲した時点でほかの短射程のユニットを停止させることになる。短射程のユニットが突撃に転じるタイミングはどうなるだろうか。ひとつは長射程のユニットが敵のやはり長射程のユニットから集中攻撃を受けた場合、もうひとつは敵が突撃してきた場合だ。この判断は難しい。例えばAIが重戦車と軽戦車のグループで敵の中戦車を殴っていて中戦車が突撃を開始した場合は軽戦車が被弾した時点でグループ全体が突撃に転じて良いかもしれない。つまり定義は「長射程ユニットが発砲の時点でグループは進軍を停止、グループ内の長射程ユニット以外のユニットが被弾したら進軍再開」となる。ややこしー

・グループの登録と解散
現状ではグループに登録されたユニットのリストは任務指示後にまっさらにリセットされる。しかし任務を受けたユニットグループのその後の状況を正確に知るには、たとえばグループAというふうにグループ名をつけて残しておいたほうが良い。その場合各ユニットからの状況報告には自分がどのグループに属しているかも含まれることになり、あらたにグループを編成する場合は無所属のユニットを優先することになる。
 ここで問題になるのはグループが乱立することだ。そうなるとややこしくなる。今考えているのはある戦術が採用されグループAが編成された時、自動的に残りの無所属のユニットをグループBにすることだ。そうすればAIは2グループを運用すればいいので楽になる。
 グループの解散にも気をつける必要がある。基本的にグループが解散するタイミングは中隊のの戦術が転換した時でいいだろう。そして次の戦術に合わせて最適のグループを組み直すのだ。ただ解散はいいがその後どうするかには気を配る必要がある。ユニットは解散の時点で集結しているとは限らない。現状ではユニットの位置は考慮されていないので離れたユニット同士がグループを組んでしまう可能性もある。戦術の転換時には一時ユニットを集結させる必要があるかもしれない。

ほかにもいろいろあるけど疲れたのでやめることにする。

0 件のコメント: