LoginSignup
7
4

More than 3 years have passed since last update.

[ゲームAI] サッカーゲームのポジショニングについて

Last updated at Posted at 2019-03-24

サッカーゲームのポジショニングの処理について記載します。

※追記
バスケについて書きました。こちらの方が参考になるかもです。
https://qiita.com/jukasahara/items/3a833eb62a62adfd34b6

コート評価について

1.コートをセル分割したマップを用意します

分割数はコートとキャラの表示比率などで変わってきますが、ここでは
縦16、横8で分割したものを考えます。
1マスづつに評価値を設定していきます。

2.コート評価の更新

○オフェンス

・相手ゴールに向かうほど評価が上がる
・相手選手10人の周囲を減算

○ディフェンス

・自分ゴールに向かうほど評価が上がる
・味方選手10人の周囲を減算

▼減算方法について
ターゲットの位置とその周囲のコート評価の評価値に、乗算パラメータをかけあわせます。

※計算例

乗算パラメータ
0.7, 0.4, 0.7
0.4, 0.2, 0.4
0.7, 0.4, 0.7

コート評価
100 100 100 100 100
100 100 100 100 100
100 100 100 100 100
100 100 100 100 100
100 100 100 100 100

↓中央にターゲットがいる場合

100 100 100 100 100
100 70 40 70 100
100 40 20 40 100
100 70 40 70 100
100 100 100 100 100

まとめイメージ

work01.png
選手たちは評価値の高いほうに向かわせます。
頂上がサッカーのゴールの評価値の山があって、敵の周囲は穴が開いてるので迂回しながら頂上を目指すイメージです。

※乗算パラメータの値についての補足
・値を低くした場合:乗算で評価値の減少が大きい→一人で十分。選手間の距離が広くなる
・値を大きくした場合:乗算で評価値の減少が小さい→複数人必要。選手間の距離がせまくなる
値はいろいろ調整すると面白いです。 中央(0.2)、上下左右(0.4)、ななめ(0.7)それぞれで変わってきます。

3.オフェンスのときの追加更新

2だけでもそれっぽく動かせますが、動きのバリエーションを増やすために処理を追加します。

アメフトのゲーム性を持ってきます

▼アメリカンフットボールの4回の攻撃について(他のルールは省略)

○概要
4回の攻撃のうちに10ヤード進むのが目標です。
10ヤード以上進むことができたら攻撃回数がリセットされ、攻めを継続できます。
4回の攻撃で、10ヤード進むことができない場合は攻守交替で相手ボールになってしまいます。

○駆け引きについて
・1回目の攻撃のとき
1回の攻撃で3~5ヤード進めば3回目あたりで目標を達成できるので、まずはボールを取られないことに気をつけて手堅く進みます。
パスじゃなくてランでの突破が多いです。

・3回目の攻撃(or4回目の攻撃)
10ヤードの目標を達成するためにリスクを取ってでも進みたい。(4回目の攻撃を失敗しても結局は攻守交替になってしまうため)
距離が近いならランでもいいですが、距離が遠い場合はパスで10ヤードを達成する必要があります。

・それぞれの行動について

行動  獲得距離の期待値 リスク
ラン
パス

ラン(走って突破)は獲得距離の期待値は小さいですが、相手にボールが渡る危険性も小さいです。(ときどきものすごい突破をすることもあります)
パスは、成功すれば獲得距離の期待値は大きいですが、パスカットされると相手ボールになるのでリスクは高いです。

○以上の仕組みをそのままサッカーに持ってきます

  • 目標の10ヤード→そのまま使えます。目標達成後に攻撃回数をリセットします。
  • 攻撃回数→時間で自動的に増える
  • 攻撃回数がMAXになったとき→リセットされるまでそのまま
  • 攻撃回数が少ないときはリスクの低い行動(横パス、バックパス、前方に誰もいないときのドリブル)を多く実行するようにします
  • 攻撃回数が多いときはリスクの高い行動(縦パス、前のスペースへのパス、ドリブル突破)を多く実行するようにします

目標達成の距離や、攻撃回数が増える時間はもちろん変化をつけられます。
チームの特色やフォーメーション、戦術で変化をつけてもいいと思います。

○コート評価への反映について
- 攻撃回数が少ない→前方への評価値の上昇量が少ない
- 攻撃回数が多い→前方への評価値の上昇量が多い
とします。
(※上の2で記載した「相手ゴールに向かうほど評価が上がる」は無しにして、こちらの反映だけでいいかもしれません)

うまく調整すれば、バックパスなどで様子を見たり、ロングパスなどで急いで攻めたりなど、緩急をつけたオフェンスを実装することができます。

チームフォーメーションについて

例.4-4-2

work03.png
フォーメーションごとに選手の行動範囲とフォーメーションポジション(フォーメーションを維持する立ち位置)を設定します。
このフォーメーションRECT(フォーメーション全体の四角)は上下左右に動いたり、拡大縮小します。
そのたびに選手それぞれの行動範囲とフォーメーションポジションを更新します。

フォーメーションRECTの移動と変形例

  • ボールを持ってる選手にそって移動する
    work04.png

  • コーナーキックのときにゴール前に集まる
    work05.png

  • プレス
    work07.png

  • 引いて守る
    work08.png

その他

・オーバーラップ(前の選手を追い越す動き)を実装したい場合は、その選手の行動範囲を前へ広げる必要があります。一時的に広げるか、試合中ずっと広げるかは調整が必要です。

選手のポジショニングについて

オフェンス

・ポジショニング候補1:フォーメーションポジション(フォーメーションを維持するための立ち位置)
・ポジショニング候補2:行動範囲内で一番評価値の高い場所
があります。

それぞれの重みを用意します
w1:フォーメーションポジション
w2:行動範囲内で一番評価値の高い場所

行先 = (w1 * フォーメーションポジション + w2*行動範囲内で一番評価値の高い場所) / (w1+w2);

w1とw2は、戦術や状況(アメフトの攻撃回数、残り時間、点差)などで動的に変えます。
上記のアメフトの攻撃回数が多くなるにつれてw2の値を増やすようなことをしています。

ディフェンス

・ポジショニング候補1:フォーメーションポジション(フォーメーションを維持するための立ち位置)
・ポジショニング候補2:行動範囲内で一番評価値の高い場所
・ポジショニング候補3:相手チームのボール所持者へチャージ

ポジション候補3は相手チームのボール保持者が近くにいる場合です。
ゴール方向をふさぐような位置取りをしつつチャージが望ましいです。

それ以外の場合はオフェンスと同様に重みを用意して算出します
w1:フォーメーションポジション
w2:行動範囲内で一番評価値の高い場所

行先 = (w1 * フォーメーションポジション + w2*行動範囲内で一番評価値の高い場所) / (w1+w2);

オフェンスと同様にw1とw2を戦術や状況によって変えます。
ゴール前に近づくほどw2を増やしてもいいかもしれません。

ボール所持者の思考ルーチンについて

やり方

ボール所持者の選択肢をすべて列挙して、それぞれに評価値を設定して、重み値で調整して、一番評価値の高い選択肢を実行します。
この処理は毎フレーム実行しています。

1.それぞれの行動の評価値を求めます

行動 評価値の計算方法
ドリブル8方向+その場 移動先の位置評価(コート評価から取得)
パス→10人 パス評価(浮き球orグラウンダーのパス、パスの距離、パスカットの危険性)+受けての位置評価(コート評価から取得)
スルーパス→10人 パス評価(浮き球orグラウンダーのパス、パスの距離、パスカットの危険性)+受けての位置評価(コート評価から取得)
クリアー クリアー評価(状況など)
シュート シュート評価(ゴールまでの距離、角度、自分の態勢など)
センタリング センタリング評価(ゴール前の味方の人数、自分の態勢など)

※補足
シュート評価の計算で、
・ゴールまでの距離
・角度
・自分の態勢
の3つの項目がありますが、これの計算は

w1:重みゴールまでの距離
w2:重み
角度
w3:重み自分の態勢
シュート評価 = (w1 * 評価
ゴールまでの距離 + w2 * 評価角度 + w3 * 評価自分の態勢)/(w1 + w2 + w3)
というように、複数の評価値を重みを使用して計算しています。

評価値の算出についても、
評価_ゴールまでの距離 = (一番遠い距離~一番近い距離)→0~1000(評価値MAX)
となるように0~1000になるようにしています。
評価値のMAX値が一定でないと、重みによる調整が直感的にできないので、評価値のMAXは統一したほうがいいです。(ここだけじゃなくて全体で)

2.重み値を調整して、評価値にかけ合わせます

戦術や、上記のアメフトの攻撃回数、周囲の状況、試合の状況などで重みを調整します。

3.一番評価値の高い行動を選択します

調整が大変ですが、まずはドリブルとパスを入れて、調整しつつ追加していくといいです。

その他

・ダッシュ(一定時間選手の移動速度がアップする)の導入をお勧めします。緩急がついて見栄えがとてもよくなります。
パス&ゴーで、パスと同時にダッシュさせてもいいと思います。

・マス目の境目を行ったり来たりして振動するように見えてしまうことがあるのでご注意ください。対策が必要です。

・ドリブル中にその場に立ち止まってしまうことがあると思います。一定時間その場で停止したらボールを蹴るなどの対応をさせます。



以上です。

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4