プレイヤーが見えないときに動きを正しく予測する方法は?


20

私はマルチプレイヤーゲームを使用しており、クライアント側で予測していますが、一部のプレイヤーはポーションを飲んで見えなくなります...

問題は、それらが見えなくなると、クライアントがそこにいることを知るために使用できるものを共有しないため、プレイヤーが見えないプレイヤーが占有しているタイルに足を踏み入れようとすると、彼は成功すると予測し、その後、サーバーから送信されたい位置補正。

解決策の1つは、クライアントが認識できるように何かを共有することですが、ハッカーはそれを使用して、目に見えないプレーヤーがどこにいるのかを見つけることができます。

ところで、私はすでに定期的な動きの予測を解決しました、それは完全に動作します。


4
すべてのプレイヤーに関する情報を送信するだけです。詐欺師はだまします。正直なプレーヤーの経験を損なうのではなく、詐欺師のためのフラッグシステムを作成することを考えてください。
user1306322 14

2
@ user1306322不正行為者を簡単にすることで、正直なプレーヤーも不自由になります。フラグを立てるシステムは良いアイデアですが、不可視性がゲームの大きな部分である場合、予防的なものが必要かもしれません。
ThatOneGuy 14

@ user1895420は通常、プレーンテキストでそのようなものを送信しないので十分であるため、平均的なプレーヤーは簡単にそのデータを取得できません。技術に精通した人だけがそれを行うことができる場合、それは他と同じくらい良い予防策です。
user1306322 14

1
または、おそらく、不可視メカニズムを少し変更して、非常に近接して動作しないようにすることをお勧めします。したがって、ゲームのデータをごまかすことができる人であっても、実際には利点を得ることができません。
user1306322 14

目に見えるプレーヤーが近くにいるときだけ、目に見えないプレーヤーの位置(彼/彼女を見えない状態に保つための旗で)を送るだけではどうですか?これにより、動きすぎの問題を回避するためにいくつかのフレームが提供されますが、不正行為者に反応するのに十分な時間を与えるべきではありません。2人の目に見えないプレーヤーの場合、衝突を無視します。すべてのプレーヤーの位置を備えた中央サーバーがある場合、位置をブロードキャストするタイミングとブロードキャストしないタイミングを調整することもできます。
jdm 14

回答:


30

これはアニメーションの問題と考えられます。不可視のオブジェクトに移動しようとしたためにサーバーから位置補正が戻ってきた場合、補正だけでなく、補正が必要な理由を示すフラグを送り返します。プレイヤーが後方にポップする代わりに、彼は「ワオ」のような後方へのアニメーションを再生し、彼が何かにぶつかったように見えるようにします。

このアプローチを使用するゲームでは、実行されたものから不可視性を(少なくとも瞬間的に)削除することは珍しくありません。特に、目に見えないプレイヤーが混雑を避けたり、他のキャラクターに近づきすぎたりすることを防ぎ、目に見えないプレイヤーとの衝突が最初に発生する頻度を減らします。したがって、この種の衝突のアニメーションが弱い(または存在しない)場合でも、目に見えないキャラクターが可視性に飛び込み、起きたことを全員に明確に電信で伝えることによって、ある程度隠されます。

近距離では不可視性が働かないようにすることで、アニメーションの必要性を取り除くことができます。これにより、他のキャラクターに近づかないように、目に見えないプレーヤーにさらにインセンティブが与えられます。これはステルスベースのゲームとAIの一般的なアプローチ(「見えない」を「ターゲットに見えない」に置き換える)であり、World of TanksのようなPvPゲームで見ることができます。目に見えないものが衝突するのに十分に近くない場合(レイテンシー制限内)、見えないキャラクターとの衝突応答を心配する必要はありません。

目に見えないオブジェクトとの衝突を無視するDracorのソリューションも良い方法です。この場合も、(目に見えないプレーヤーのクライアント用に)いくつかのアニメーションが必要になるため、オブジェクトは画面上のプレーヤーのアバターを切り取るだけではありません。他に何もなければ、目に見えるオブジェクトが常に目に見えないオブジェクトをプッシュするようにして、誰かが彼と衝突した場合に、目に見えないプレーヤーが自動的にサーバー上の邪魔にならないようにします。

不可視-不可視の衝突は少し複雑です。2つの不可視オブジェクトが一緒にクリッピングされているかどうかを誰も見ることができないため、衝突を無効にするだけで有利な場合があります(「不可視」とは、両方のオブジェクトが同じクライアントから見えないことを意味します)。オブジェクトの1つが可視になると、自動的に可視-不可視の衝突応答に戻ります(不可視のオブジェクトを押しのけます)。

不可視性が誰が誰を見ることができるかの複雑なセットを持っている場合、これはすべてトリッキーになります。上記の最初または2番目のソリューションは、必要な場合に最適です。このようなすべての問題に技術的な解決策が必要なわけではありません。多くの場合、設計ソリューションが必要です(たとえば、この機能を設計者に許可しないでください)。


5
ゲームTeam Fortress 2はその最初のアプローチを使用します...目に見えないスパイが他のプレイヤーに触れた場合、他のプレイヤーはスパイを見ることができます(または、後ろから少なくとも障害物を感じる場合)。
Xantix 14

4

目に見えないプレーヤーがどこにあるかをクライアントに伝えたくない場合、ここには2つのオプションしか表示されません:1)目に見えないプレーヤーのユニット衝突を無視します-単純な解決策であり、プレーヤーは目に見えないプレーヤーを見つけることができません衝突テスト。2)予測されたパスを決定した後、サーバーに予測されたパスを送信し、サーバー側でパス自体を修正してから、新しいパスを送り返します。


不可視のプレーヤーの衝突を無視することの問題は、不可視のプレーヤーが他の誰かと衝突したときに、不可視になるのをやめることです。また、それは正しいとは感じません。私のゲームでは、私は本当にパスや経路探索を持っていない、プレイヤーは一度に4つの方向、1つのステップで移動することができます
affiszervmention

次に、予測された動き(単一のベクトルまたはベクトルの配列)を送信し、サーバー側のチェックを行います。または、次のように修正をアニメーション化します。
ダニエルルスニャク14

1
グリッドベースのマップがあり、とにかくすべての正方形を1つずつ確認している場合は、SHA-1やSHA-2などの一方向エンコーディングを使用して、サーバー側の非表示文字の位置をエンコードすることもできます。 、チェック済みの座標を同じアルゴリズムでエンコードして、自分のパスをチェックします。パフォーマンスが優れているとは言えませんが、クライアント側で本当にやりたい場合、このソリューションは限られた数のポジションでうまく機能する可能性があり、エンコードするグリッドポイントの量が多いため、ハッキングは本当に面倒な場合がありますメモリ内のデータと一致します。
ダニエルルズニャック14

動作していることがわかります。私の最小マップには1500の異なる位置があります。攻撃者がすべての位置を事前計算するのを防ぐために、キーを数秒ごとに変更してHMACを使用する必要がありますか?
添付ファイル14

5
いいえ、思い付くスキームは、ハッカーに対して「安全」ではありません。プレーヤーが特定の位置に衝突するかどうかをクライアントが判断できる場合、誰かがあなたのゲームをハッキングできます。回転キーを使用したHMACは、クライアントが1秒に1500個のHMACを実行することを妨げません。んではない暗号を自分で行うことを試みます。元の目標を達成したい場合、プレーヤーの1タイルまたは2タイル以内にいる場合にのみ、目に見えないプレーヤーの位置をクライアントに送信します。そうすれば、誰かがあなたのすぐ隣にいるかどうかを知るためだけにハックすることができます(これをチェックするために移動することができるので、これは役に立ちません)。

2

何かを誤解していない限り、解決策は簡単です。目に見えないすべてのプレーヤーのクライアント情報を送信しないでください。予測されている間隔中に動きの制限内で衝突する可能性のある範囲内にいるプレーヤーだけに送信してください。言い換えれば、クライアントが200ミリ秒先まで予測するだけでよい場合は、max_player_velocity units/sec * 1/5 sec離れたユニット内の目に見えないプレーヤーに関する情報のみを送信します。


それはうまくいくと思いますが、私のゲームはタイルベースです(言うのを忘れていました)。
添付ファイル14

そのため、隣接するタイル、または2歩離れた場所などにいる目に見えないプレイヤーのみを公開します。
R .. 14

それは彼らが衝突するではない、と目に見えない選手は発見されませためにハッキング誰からも離れて滞在する必要があります
affiszervmention
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.