hasht's notes

ゲームAIやUnityの話題

キャラクターの移動制御におけるステアリング

ステアリング(steering)という概念が説明される機会が少ない気がするので手短に。

ナビゲーションの手順

現実に人が自動車を運転する場合を考えると、

  1. カーナビなど道順を決める
  2. 人がアクセル・ブレーキやハンドルを操作する
  3. 自動車が操作に従って動く という段階に分けることができる。

ゲームなどで言えば、これはそれぞれ

  1. 経路探索
  2. ステアリング
  3. アニメーション

に対応する。

経路探索の為のデータ表現としてはウェイポイントナビゲーションメッシュNavMesh)が、またアルゴリズムとしてはA*(A-star)などがある。簡単な構造であれば事前に最短経路を計算してルーティングテーブルを用意することもできる。

ステアリング

ステアリングではキャラクターの移動速度を決定する。

経路探索で見つかる経路は基本的に何ピクセル動くだとかの詳細が決まっているわけではない(トポロジー的)ので、具体的にどう動くかを選択する必要がある。こうした課題はステアリングの中でも特に経路追従(path following)と呼ばれる。経路追従を行うには、例えばfunnelアルゴリズムを使う。

ステアリングの主な課題として障害物回避(obstacle avoidance)もある。前回の記事↓のRVO(Reciprocal Velocity Obstacles)など衝突回避アルゴリズムとしてよく知られている。

hasht.hatenablog.com

参考

[1] Steering Behaviors For Autonomous Characters

いろいろなステアリング。日本語では『実例で学ぶゲームAIプログラミング』第3章に詳しく書かれている。

[2] FINAL FANTASY XVにおけるキャラクターナビゲーションパイプライン ~パス検索とステアリングとアニメーションの連携~

ナビゲーション各段階の技術が詳しく説明されていてめちゃくちゃ参考になる。