2012年12月2日日曜日

【Unity】RTS:AI 3 攻撃目標の選定


複数の敵の中から攻撃目標を選ぶ場合、基準が必要となる。戦闘において努むるべきは味方の損害を最小にし敵の損害を最大にすることだとすると、「撃破しやすい敵」か「味方を撃破しうる敵」が優先目標となる。「撃破しづらくかつ味方を撃破し得ない敵」はほっといても大丈夫である。問題は常に「撃破しやすい敵」=「味方を撃破しうる敵」ではないということだ。以上を踏まえて攻撃目標評価関数を導入する。


まずAIが攻撃目標を評価する上で基本となるユニットのスペックを規定する。「戦闘移動コスト」は速度・射程・目標座標までの距離をパラメータに持つ関数である。「支援戦闘力」はパラメータに攻撃力と戦闘移動コストを持ち、味方を支援できる力を示す。例えユニットの攻撃力が大きくとも低速なら支援戦闘力は低くなる。「総合戦闘力」はユニット自身の攻撃力+周辺の味方のこのユニットへの支援戦闘力を示しており、これがAIが各ユニットの戦闘力を評価する際の基準となる。攻撃力が低いユニットでも群れていれば戦闘力評価は高くなるのだ。
この総合戦闘力をもとにさらに2つの関数を設定する。一つは「戦力投入コスト」である。これは敵の総合戦闘力をもとに敵を撃破するのに必要な味方戦力を動員するコストを示す。味方の総合戦闘力が劣っている場合追加の戦力が必要となるが戦力の集結には時間がかかるため戦力投入コストは高くなる。「脅威度」は敵が近く、強大なほど大きくなる。同一状況下でも戦力投入コストと脅威度は敵について相反する評価を示す場合がある。これら2つの評価を調整し最終的な評価を下すのが「攻撃目標評価」である。

0 件のコメント: