AIプログラムとかUnityゲーム開発について

探索や学習などを活用したAI系ゲームを作りたいと思います。

近くにいる敵の数を評価する

これまでターゲットを決めるには、一番近い敵をという距離を評価していましたが、各位が近くの敵の数を調べておいて、それをターゲットの決定評価に加えてみました。

tmpDis = Vector3.Distance (t1, t2);
tmpPts = tmpDis*(float)(other.nearEnemyCount+1)/3f;

tmpDisは距離で、tmpPtsは距離に近くの敵数を乗じたもの

  • 敵数0 : 距離*1/3
  • 敵数1 : 距離*2/3
  • 敵数2 : 距離*3/3
  • 敵数3 : 距離*4/3

周囲に敵数0のフリーな敵をより狙い、周囲に敵が多い(=味方が多い)敵は低い評価にする。
ただ乗算だと副作用も大きいので、距離+近くの敵が3人以上は減点
みたいな和の評価の方が安定するかも。

f:id:yasu9780:20150426104338p:plain

この図で、ステータスの横の(2)といった数字が、近くの敵数です。
左側にいるゾンビは近くに敵が2人いると認識していて(左右から01と02に挟まれている)
すでに味方が囲んでいる敵を低評価することで、
右端の02が、より近い左のゾンビではなく、上方の遠いゾンビに向かうようにするのが狙い。
この評価法で、特定の敵に固まらずに、ばらけて各個撃破するようになるはず。

ただ、単独攻撃が増えるので、少なくともペアで当たるほうが安全という評価は
別個入れる必要があると思います。

あと、遠距離攻撃者はまた話が変わってきて、
基本的に、味方が狙っていない離れた敵を優先して攻撃したほうがいい。
逃避中ゾンビだと放置すると逃すし、近接攻撃者が追うとコストが高すぎる
ただし、脅威を考えた場合、一番近いゾンビからは回避しないといけないわけで。
(このへんは将棋も同じで、離れ駒を金銀で追うと移動コストが丸損で、飛角で狙うべき。もっとも飛角でさえも手損は発生するが、将棋はターン制だから)

  • 攻撃対象は遠くて味方が狙っていないゾンビ
  • 退避対象は近いゾンビ(味方が周囲にいないとさらに危ない)

ということで、遠い敵と近い敵という二重に評価する必要がある
なかなか複雑(^_^;)
要は攻防の1手で行動すべし。