レースゲームでどうやって車をコントロールできるのか興味があります。
AIエージェントは、「0.35でスロットル、0.5でステアリングホイール、0.0でブレーキ」などのコマンドで車を制御する必要がありますか?それとも、車が固執するカーブを事前に計算する必要があります。前輪の回転のようなビジュアルは、すべてが一貫して見えるようにするためのものですか?または、他の方法はありますか?
レースゲームでどうやって車をコントロールできるのか興味があります。
AIエージェントは、「0.35でスロットル、0.5でステアリングホイール、0.0でブレーキ」などのコマンドで車を制御する必要がありますか?それとも、車が固執するカーブを事前に計算する必要があります。前輪の回転のようなビジュアルは、すべてが一貫して見えるようにするためのものですか?または、他の方法はありますか?
回答:
あるレベルでは、ゲームは事前に計算された道を進んでいると言えます。とにかく、レーシングゲームのトラックは(通常)事前に計算されたパスです。
トラックをランダムに生成することについて話している場合でも、ゲームは車が到着する瞬間のトラックの現在の部分を計算している必要があります。
まあ、それは簡単でした。それについて他に何か?
事前に計算された経路をたどり、車を系統的に制御することは、ゲーム業界で使用されます。答えは、両方を使用することです。
まず、「曲線の計算」には2つの意味があることを述べておきたいと思います。
曲線上の位置を出力する関数を作成し、パラメーターとしてクエリの距離を指定します。
従うべきポイントのリスト(または指示およびその他の制御情報)として理解されるパスの作成。
前者は、予測や一部の物理シミュレーションで役立ちます。しかし、オブジェクトの制御について話すとき、後者が推奨されるアプローチです。
注:古いゲーム(1980年代)では、動く障害物に似ている他の車。彼らはあなたが彼らを避け、彼らを凌toするためにそこにいた。それらについては話していません。
事前に計算されたパスをたどる:これは、シネマティクスや反復可能なシーンに役立ちます。たとえば、GTA San Andreasでは、追跡ミッションが追跡ターゲットになり、すべての車が事前定義されたパスをたどります(これにより、追跡ターゲットがトラフィックを回避できるようになります※)。しかし、それらを混乱させるとすぐにAI制御にフォールバックします。この場合、AIは通常のパスをたどるべき場所に到達するためにパス検索を行う必要があります。
※:実際には、事前に記録されています。記録と再生は、GTA SAゲームエンジンの新機能の1つでした。
AIにより制御:
AIの最も単純な形式は、ステートマシンです。状態をチェックし、それに応じたアクションを実行します。これらの状態とアクションの組み合わせを動作と呼びます。アクションは、プレーヤーのゲームパッドと一致する必要はありません。動作もしません。
単純なゲームの場合、おそらく2つの注目すべき動作のみが必要です。1)トラック上にある場合は、他の車や障害物を避けてトラックをたどります。2)トラック上にない場合は、トラックに戻ります。
この段階では、パス(トラック)をたどることはそれほど遠くありません。しかし、トラックは実際には線ではないため、パスをたどるということではなく、(他の車や障害物を避けながら)近くにとどまることについて話しているのです。AIが「ステアリング、ブレーキ、加速」を解決する必要があることを意味します。
最新のゲームでは、車は物理シミュレーションの対象にもなります(衝突を解決し、リアリズムを保つため)。そのため、ゲームループの各反復は速度と加速度に基づいて更新され、現在の動作を追跡するために「ステアリング、ブレーキ、加速」(速度の調整)も適用されます。
また、最近のゲームには、より複雑な動作が含まれる場合があります。たとえば、AIは別の車にぶつかったり、道をふさいだりすることがあります。実際、AIは何らかの形の機械学習に基づいてどちらを適用するかを選択することさえありますが、私は脱線します。
最後に、プレーヤービューの外でAIカーをよりシンプルに制御することも役立つ場合があることを考慮してください。パフォーマンスまたはラバーバンディングのいずれか(この場合、レースを面白くするためにAI車をプレイヤーの近くに配置します。実際に敵を置き去りにできない場合は、AIの不正行為と見なすことができます)。
アニメーションについては、通常、車輪の物理を個別にシミュレートすることはお勧めできません。これを行うと、ゲームにリアリズムが追加されますが、パフォーマンスが低下します。通常、ゲームは、ホイールの動きに関する動作を表現し、結果をシミュレートするのではなく、動作に基づいてホイールをアニメーション化します。
もちろん、車輪が地面と接触しているかどうかに関係なく、さらに考慮する必要があります。そして、おそらくサスペンションをアニメートします。
車の物理/状態モデルを車のコントローラーから分離し、AIエージェントとプレーヤーコントローラーを2種類の交換可能なコントローラーにし、質問で提案したような高レベルのコマンドを使用することを強くお勧めします。
これには多くの素晴らしい効果があります:
ところで、これはMVC分離の特殊なケースです。