AI Game Programming Wisdom4 "Company of Heroes Squad Formations Explained"の概要
AI Game Programming Wisdom4のSection2.1の"Company of Heroes Squad Formations Explained"の記事を読んだので, その概要について書きます.
- フォーメンションついて
- フォーメンションは, 1人のLeaderと複数人のFollowersから構成されます.
- 基本的には, 1人のLeaderの後を, 複数人のFollowersが追従する形です.
- フォーメンションは階層的な構造を取ることができます (後述).
- Squadの構成について
- Squadはcore, left flank, right flankを3つの要素から構成されます.
- それぞれの3つの要素はフォーメンションになっているのですが, SquadのLeaderはcoreに配置されていて, そのSquadのLeaderのFollowerはleft flankとright flankのLeaderになっています.
- フォーメンションにおけるLeaderとFollowersを以下のように記述すると,
Leader -> Followers
Squadのフォーメンションは以下のように記述できます.
Core Leader (Squad Leader) -> Core Followers -> Left flank Leader -> Left flank Followers -> Right flank Leader -> Right flank Followers
- Squadの移動について
- Squad Leaderのゴール地点を決定し, Squad Leaderの移動パスをA*によって求めます.
- そのFollowersは, SquadのLeaderが2秒後に移動する位置からオフセットした位置をゴール地点として, 移動します.
- Squadのフォーメンションは階層的になっているので, 上記のLeaderとFollowersの移動のルールを階層的に適用します.
- Followersは現在地点とゴール地点の距離に応じて, 移動速度を変化させます.
- Leaderの移動予定経路からオフセットした地点を, Followerのゴール地点とするときの問題と解決策
- 問題 : Followerのゴール地点が障害物と重なっているとき
- 解決策 : 新しいFollowerのゴール地点を, cheapなA*(スタート地点:Leaderのゴール地点, ゴール地点:障害物と重なっているFollowerのゴール地点)をして, 展開した有効なノードのうち, "障害物と重なっているFollowerのゴール地点"と最近傍のものを, Followerのゴール地点とします.
- Leapfrogging
- Leapfroggingとは, 一時的に自分の本来の位置を離れて, 何か興味がある場所に暫く寄ってから, 本来の位置に戻ることです.
- ただ普通にLeapfroggingを行うと, 例えばSquadが急いで移動しているにも関わらず, 特定の場所で数秒間立ち止まったりしてしまって不自然です.
- そこで, "Followerの移動予定パス上のゴール地点"と"Leapfrog地点"を1:4で内分した点を目標地点として, 移動させます.
- Virtual Leader
- 但し, 上記のようなLeapfroggingのシステムを導入したときに, LeaderがLeapfroggingを行うときにはFollowersもそれに追従してしまって, Squadの動きが不自然になるという問題点があります.
- そこで, LeaderがLeapfrogginを行うときには, Virtual LeaderというLeaderの本来の移動パスに沿って移動する仮想的なLeaderを生成し, Followersはそれに追従させるようにします.