タグ付けされた質問 「movement-prediction」

4
クライアント側の予測はどのように機能しますか?
私はValve + GafferonとGoogleの何百ものページを読みましたが、何らかの理由でクライアントの予測に頭を悩ませることはできません。 私の理解では、基本的な問題は次のとおりです。 クライアントAは入力を送信します T0 サーバーはで入力を受け取ります T1 すべてのクライアントが変更を受け取ります T2 でT2しかし、クライアントの予測を使用して、クライアントAは、に位置適切になりましたT4。 サーバーが移動要求を受け入れると予測するときに、クライアントAがサーバーの前にいないことをどのように確認しますか?明らかに、常に先を行っているため、サーバーが最後に見た場所に戻ってしまいます。私が試したすべての修正を行っても、サーバーはあなたの後ろで停止するため、停止してもこれは依然として顕著です

6
回転するオブジェクトが右端でターゲットにヒットすることを確認する方法は?
私は、プレイヤーが自由に狙いを定めてナイフを投げる投げナイフタイプの武器に取り組んでいます。ナイフは空中を回転し、衝突すると回転を停止し、衝突したオブジェクトの親になります。回転はアニメーションによって処理され、ナイフのパスは物理学によって処理されます。 私が直面している問題の1つは、ナイフが敵に衝突したときに、ナイフが敵に向かっていることを確認する方法です。現時点では、時々ナイフが敵のハンドルに最初に埋め込まれることがあります。これは明らかに非現実的です。同時に、ナイフが回転する速度はプレイヤーの制御を超えているため、ナイフが最初にブレードに衝突した場合にのみナイフを敵に「ヒット」させるのは非常に不合理だと思います。 私は同じような武器の多くの遅いキルカム映像を見てきました、そして武器が投げられるたびに空中を回転し、魔法のように常にそのターゲットを指しているブレードで終わります。投げる距離が一定になるゲームの場合、これは非常に簡単です。しかし、予測できない多くの要因が関係しているので、これをどのように予測するかはよくわかりません。ナイフの方向、ナイフの回転、敵の位置、敵からの距離など。可能であれば、ゲームはかなりローエンドのデバイス向けであるため、複雑な予測ロジックを使用する必要はありません。これを解決する「煙と鏡」の方法はありますか? 例:https : //youtu.be/0fav8lFpBko?t=42s

3
Unity-船を2Dトップダウンゲームのポイントに現実的に移動する方法
帆船をマウスでクリックした場所に移動しようとしています。この動きは現実的である必要があります(船が動き回る後ろにあります)。したがって、マウスのクリックが左で船の前にある場合、船は右回転するために曲がりくねった経路でそこに移動する必要があります 誰かがこの問題で私を助けてくれたら嬉しいです

2
クライアント側の予測で移動オブジェクトを補正する方法は?
Star Controlのようなmeleeをサポートするゲームサーバーを実装しています。船を飛ばして射撃し、動きを動かすための超単純な速度/加速/減衰物理学を備えています。 私は、Valve、Gafferon、Gambettaを読み、クライアント予測のためにGambettaのアルゴリズムを実装しました。 クライアント予測は、サーバーからの位置を更新することでプレーヤー船に作用し、サーバーで未処理の入力をプレーヤー船に再適用します。 残念ながら、私のゲームではうまく機能しません。ガンベッタの例では、すでに移動しているオブジェクトや段階的に更新されるコマンドは考慮されていないという事実と関係があると思います。(「ステップ」とは、フレームを意味します)。そのため、私のゲームでは、プレイヤーは(すでに動いている)船を加速するために押し上げます。船はクライアント上で動き続け、コマンドをサーバーに送信し、通常は次のステップでサーバーからワールドスナップショットを受信します。私はもっ​​と何かを得ます: playerコマンドはクライアントのステップ3で実行されますが、サーバーではサーバーのステップ5でのみ実行されます。クライアントのステップ6でクライアントが世界のスナップショットを受信するまでに、特に高速の場合、予測はかなりずれます。 問題の核心は、クライアントがステップ5でコマンドを実行するのに対し、サーバーはステップ6でコマンドを実行することです。コマンドを使用してクライアントステップを送信し、サーバーをロールバックしてクライアントタイムステップを使用してコマンドを再実行することを検討しました。ただし、ロールバック以降に受信したコマンドがどうなるか、送信されたステップを変更することによってクライアントを不正に利用する方法など、他の多くの問題が発生する可能性があります。 このようなGoogleの動画を読んだり見たりすると、別のアプローチが言及されています。このアプローチでは、プレーヤーの位置をスナップショットの位置に合わせて徐々に変更します。 私の質問: Gambettaのアルゴリズムを一定のステップ移動で機能させることができますか?それとも概念的に私のゲームと互換性がないのですか? ステップを徐々に補間するのは正しい方法ですか?もしそうなら、サーバーから受信したばかりのオブジェクトと一致するように、クライアントの位置から既に移動しているオブジェクトをどのように補間しますか? これらの方法、段階的補間、Gambettaのアルゴリズムは連携して機能しますか、それとも相互に排他的ですか?

2
クライアント側予測でリアルタイムのランダムな動きを処理する方法
クライアントとサーバーで同じ「物理」ループを実行するリアルタイムマルチプレーヤーゲームを構築しています。私は、本質的なランダムな動きであるステアリング動作「ワンダー」を使用しています。ワンダーアルゴリズムを実行すると、クライアントとサーバーは異なる乱数を生成します。 自然にランダムに見える動きをどのように保つことができるのか疑問に思っていますが、クライアントとサーバーが同じ結論になることを保証する定数を使用します。

2
外挿は衝突検出を中断します
スプライトの動きに外挿を適用する前は、衝突は完全に機能していました。ただし、(物事を滑らかにするために)スプライトの動きに外挿を適用すると、衝突が機能しなくなります。 これが、外挿前の動作です。 しかし、外挿を実装した後、衝突ルーチンが壊れます。これは、(レンダーコールにある)外挿ルーチンによって生成された新しい座標に作用しているためと考えています。 外挿を適用した後 この動作を修正するには? 外挿の直後に追加の衝突チェックを試みました-これは多くの問題を解決するようですが、レンダリングにロジックを入れることは問題外なので、これを除外しました。 私はまた、spritesXの位置のコピーを作成し、それを外挿して、オリジナルではなくそれを使用して描画してみたので、元のロジックをそのままにして、ロジックがピックアップできるようにしました。壁にぶつかったとき。これもこれに対処する正しい方法ではないと確信しています。 ここで似たような質問をいくつか見つけましたが、答えは役に立ちませんでした。 これは私の外挿コードです: public void onDrawFrame(GL10 gl) { //Set/Re-set loop back to 0 to start counting again loops=0; while(System.currentTimeMillis() > nextGameTick && loops < maxFrameskip){ SceneManager.getInstance().getCurrentScene().updateLogic(); nextGameTick+=skipTicks; timeCorrection += (1000d/ticksPerSecond) % 1; nextGameTick+=timeCorrection; timeCorrection %=1; loops++; tics++; } extrapolation = (float)(System.currentTimeMillis() + skipTicks - …

1
プレーヤーの速度変更を送信するときにクライアントとサーバーを同期するにはどうすればよいですか?
クライアント側の予測を実装しています。ほとんどの説明は、クライアントが「プレーヤーを1ポジション上に移動する」のようなメッセージを送信することを前提としています。「プレイヤーのベロシティをxに設定」のようなメッセージを送信するとどうなりますか? クライアントでは、サーバーよりも先にプレイ​​ヤーが(クライアント側の予測によって)自分の速度を設定するため、2つが同期しなくなります。この問題は、平均遅延を考慮しても解消されません。 どうすればこれに取り組むことができますか?

1
Box2Dでプレイヤーと発射物の衝突を予測するにはどうすればよいですか?
物理エンジンとしてBox2Dを使用して、リアルタイムのシューティングゲームを作成しています。ゲームプレイは主に、Angry Birdsのような軌道に関するものです。スローモーションエフェクトを作成し、プレーヤーが倒されたときにカメラをプレーヤーに移動したいのですが、実際に衝突が発生する前に、石が空中にあるときにエフェクトを開始する必要があります。 損傷の大きさは衝突時にのみインパルスに基づいて計算されます。これはリアルタイムゲームであるため、プレイヤーはラグなくキャラクターの物理体を動かすことができなければなりません。 どうすれば彼らの死を予測できますか?可能ですか?レイキャストすることはできますが、別のオブジェクトが移動してそのパスをブロックするとどうなりますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.