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はそれに追従させるようにします.