カスタム形状の宇宙船を動かすAI(動きの動作に影響を与える形状)


15

ネットワークターンベースの3D-6DOF宇宙艦隊戦闘戦略ゲームを設計しています。これは、船のカスタマイズに大きく依存しています。質問を設定するにはゲームについて少し知る必要があるので、ゲームについて少し説明しましょう。

私が目指しているのは、カスタムシェイプと付属モジュール(プロペラ、トラクタービームなど)を備えた独自の艦隊を作成する能力です。これにより、各艦に長所と短所が与えられるため、艦隊の分布が多数あります。たとえば、側面に2つのプロペラを備えた長い船は、その飛行機の周りを簡単に回転し、後方に多くのプロペラを置かない限り、大きな船はゆっくりと動きます(したがって、移動するときに「建設」ポイントとエネルギーを多く消費し、その方向に向かって速く移動するだけです。)この機能を中心にすべてのゲームのバランスをとる予定です。

ゲームは、注文と戦闘の2つのフェーズを中心に展開します。注文フェーズでは、さまざまな船を指揮します。すべてのプレイヤーが注文フェーズを完了すると、戦闘フェーズが開始され、船の注文がリアルタイムでしばらくの間解決され、その後アクションが一時停止し、新しい注文フェーズがあります。

問題は、プレイヤーの入力について考えるときに発生します。船を動かすには、操縦、前進、ブレーキ、定位置で回転したい場合、異なるプロペラをオンまたはオフにする必要があります...これらのプロペラは全力で動作する必要がないため、より多くの動きを実現できますより少ないプロペラとの組み合わせ。

このアプローチは少し退屈だと思います。プレイヤーはモーターなどをいじりたくありません。ただ移動して殺したいだけです。私がプレイヤーにこれらの船に命令を与える方法は、目的地回転によるもので、AIは正しいプロペラ力を計算してその運動と回転を実現します。ターン計算全体を通して推進力が同じである必要はないため(注文が与えられた後)、船が移動するときに反応し、必要に応じてプロペラの出力を動的に調整する場合はクールになりますが、実装するのが難しすぎて、ゲームが機能するために実際には必要ありません。

どちらの場合でも、AIはどのプロペラをアクティブにして最適な(または少なくとも最悪ではない)軌道を達成するかをどのように決定しますか?

私はいくつかのアプローチについて:

  • AIの学習:船の種類は試行錯誤によって動きを学習し、より多くの用途で動作を調整し、最終的に「スマート」になります。AIコーディングにこれほど関与したくはありませんし、プレーヤーにとってはイライラすることになると思います(プレイしなくても学習させることができたとしても)。
  • 事前に計算されたタイムステップの動き:船の作成時に、特定のデルタ時間の各プロペラ構成と出力について、考えられるすべての動きが計算されます。メモリ集約型、,い、悪い。
  • 事前計算された軌跡:上記と同じですが、各デルタ時間ではなく、軌跡全体が可能な限り適合します。戦闘フェーズ全体でプロペラの構成を固定する必要がありますが、それでもメモリを大量に消費し、ugくて悪いです。
  • 継続的なブルートフォース: AIは、戦闘フェーズ全体で可能なすべてのプロペラ構成を継続的にチェックし、いくつかのタイムステップを事前計算し、それに基づいて最適なプロペラを決定します。短所:今は良いことは後でそれほど良くないかもしれませんし、CPUに過度に負荷がかかり、見苦しく、悪いです。
  • 単一のブルートフォーシング:上記と同じですが、シミュレーションの開始時にブルートフォーシングのみが行われるため、戦闘フェーズ全体で一定のプロペラ構成が必要です。
  • 連続角度チェック:これは完全な移動方法ではありませんが、「愚かな」プロペラ構成を破棄する方法かもしれません。現在のプロペラの法線ベクトルと最後のベクトルを考えると、角度に基づいてプロペラに必要なパワーを概算できます。これは、戦闘フェーズ全体を通して継続的に行わなければなりません。私は最近、これを考え出したので、あまり考えませんでした。先験的に、それは「今は良いことは後で良くないかもしれない」という欠点もあり、より良い推進構成を作るために一緒に行動する他のプロペラを気にしません。

私は本当にここで立ち往生しています。何か案は?


ステアリング動作を調べましたか?
ストーンメタル

1
@stonemetal確かに。ここでの問題は、通常、オブジェクトの位置と回転を完全に制御し、いくつかの制約(または少なくともWeb上で見つけたもの)を想定して、ステアリング動作がモ​​デル化されることです。ここのAIはエンティティを完全に制御できません。 、ただしエンティティを移動させるもの(プロペラ)についてのみ。私はこれらの操縦行動を宇宙船の実際の移動と結びつけるのに苦労しています。
kaoD

これは、ステアリングの動作がレースカーでうまく機能しない理由と同じです。ステアリング動作は素晴らしいですが、すべてに対する普遍的な解決策ではありません。
tenpn

@haoD ghostonlineの答えに沿って何かを考えていた。彼らに今までのものを作らせてから、それをステアリング動作の制約に変換します。あなたの反応からは、ステアリングの動作はおそらく十分に柔軟ではないように思えます。
ストーンメタル

1
私はこれが非常に古いことを知っていますが、あなたが探しているのはキノダイナミック運動計画
-mklingen

回答:


4

申し訳ありませんが、実証済みのソリューションはありませんが、これを数学的に解決することはできませんか?

プロペラとその重心からのオフセットを考えると、回転できる平面を計算できます。

任意の動きに対して、1つ以上のプロペラを使用できます。各プロペラは、その飛行機がターゲットの向きに貢献できるかどうか、プロペラが貢献するのにどれだけの労力を費やすか(CoMから遠いプロペラはより少ないエネルギーを使用してより多くの旋回を生成できる)、およびそれがどれだけ近づくかを照会することができますターゲットオリエンテーションへ。次に、そのサーチスペース全体でA *を実行します。これにより、使用される総エネルギーが最小になるか、動きが最速になる可能性のある低コストのソリューションが生まれます。

ターンを完了するとそれを再評価し、ターゲットに近づいたら、おそらくPIDコントローラーを使用してパワーを調整します。

前方への移動の場合、単純なソリューションでは常に前方に移動し、ターゲットに近づくとターゲット速度が低下します。プレイする3Dスペースがあるので、複雑な3ポイントターンルーチンを回避できます。何らかの初期状態として、直線速度用に選択されたプロペラからの出力を回転計算に含める必要があります。

これは封筒の裏側ですが、大きな欠陥は見当たりません。たくさんのハードワークと数の調整。:)


これは私が探していたホエー、数学的な解決策です...ありがとう!簡単に聞こえるように願っています。
kaoD

7

AIを使用したプレイアビリティのためにプレイヤーの制御を少し放棄したいので、プロペラへのタックの影響を単純化し、コンピューターアルゴリズムのより簡単で管理しやすいパラメーターに船の寸法を変更することを検討することもできます。プレイヤーは船の任意の部分にプロペラを追加することを引き続き許可されていますが、一度完了すると、パラメーターに「圧縮」されます。

各プロペラは、船舶の旋回速度に影響を与えます。または、平行に配置されたプロペラと組み合わせて、特定の次元の移動速度に影響を与えます。プロペラごとにこれらのパラメーターを組み合わせると、船の最大回転数と速度が得られます。各プロペラとこれらの2つのパラメーターを組み合わせて、利用可能なすべての寸法(上、下、左、右、前方、後方)について、船全体の最大回転数と速度に設定します。

各次元の回転速度と速度を使用すると、実際に船が目的地に移動するのに十分な情報が得られます。プレイヤーはプロペラの構成の効果を見ることができますが、ボンネットの下では入力が大幅に簡素化されます。船が移動しなければならない距離に基づいて複数の飛行戦略を考え出し、飛行をより自然に見せ、船の動きをコントロールしたプレイヤーの感覚を高めることができます。しかし、最後に、あなたが言ったように、船が目的地にどのように到達し、そのルートが最適であるかどうかは関係なく、ただそこにいる必要があり、到着時間はプロペラの構成に影響されます。

船の寸法については、大まかな効果のために圧縮された速度値を取得したら、それらを考慮するか、より正確な効果を計算するときにそれらを使用できます。違いはプレイヤーのコントロールの感覚に影響を与えないかもしれないので、おそらく正確な方法が努力の価値があるかどうかをテストしたいと思うでしょう。


まさに私が探していたものではありませんが、本当に必要な場合にはトリックを行うかもしれません。アイデアへの賛成票:)
kaoD

0

空間では、形状は動きに影響しません。ドラッグする空気はありません。

重要なのは船とアドオンの総質量です。これは、より単純な質量推力重力問題です。したがって、これらの計算を行うことができます。または、ターンベースゲームなので、TravelerのようなRPGのような移動システムを開発します。


GD.SEへようこそ!この質問にはすでに受け入れられた回答があり、2年前に尋ねられました-おそらくサイト上の新しい質問のいくつかに答えることができます。
ポーラー

はい、すべて真実ですが、私はいつも他の人が後で(私がしたように)それを偶然見つけて、それが何らかの有用性を見つけると思います。へー、私は質問に答えるためにここに来ませんでした…ほとんどのように、自分の問題の解決策を掘り下げました。
gnoll110

@Polar質問のポスターはこちら。私は彼の返事がとても面白いと思いました!彼が返事に戻ってきてうれしいです。そして、数年後に付加価値を与えることがSOの最も価値のある部分の1つだと思います。
kaoD

@ gnoll110私はここで間違っているかもしれません。抵抗はありませんが、重心と推力ベクトルが形成する角度は、船がどのように移動または回転するかに影響します...そうですか?たとえば、重心と直列に配置されたエンジンは移動しますが、重心から移動すると、回転するコンポーネントが船に追加されます。
kaoD

@kaoD少し厳しいと思われる場合は申し訳ありません-明らかに多くのSOが後で価値を追加しています。私はちょうど彼ができることが示唆されたの新しい質問に答える-多くの質問が答え、より良いです!
ポーラー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.