2

Unity3Dでマルチプレイヤーゲームを開発していますが、同期についてサポートが必要です。プレーヤーの1人はサーバーとして機能し、他のすべてのプレーヤーはクライアントです。ゲームのある時点で、すべてのプレーヤーは、ゲームの次のステップに進む前に、質問に答えるのに10秒の猶予があります。質問に答えるのにかかる時間が記録され、最速の答えを見つけるために使用されるため、すべてのクライアントが同時にタイマーを開始することが非常に重要です。

メッセージングに関する限り、これを構造化するための最良の方法は何ですか?そして、これらのメッセージにはどのような情報が含まれますか?

私が試した/考えたこと:

  • サーバーはタイマーを開始し、全員に同じことをするように指示します。問題:クライアントが遅れている場合、質問はさまざまな時間にポップアップします。
  • サーバーはタイマーを開始し、タイマーが開始した日時を全員に通知します。問題:クライアントが遅れている場合、クライアントは最初ではなく特定の時間にすぐにジャンプします。

前もって感謝します。

4

2 に答える 2

1

ゲームを開発している相手によっては、いつでもクライアントにタイミングを任せることができます。サーバーに、クライアントに質問を表示してタイマーを開始するように信号を送り、応答を待つようにします。その後、各クライアントはユーザーの時間を計り、ユーザーの回答とともにサーバーに時間を与えることができます。サーバーがクライアントに数秒の「バッファ」を提供する限り、ラグがいくらあっても、正確なタイミングですべての回答を受信する必要があります。

これに関する唯一の問題は、やはりオーディエンスによっては、ユーザーが送信されたデータを改ざんする可能性があることです。

于 2012-12-03T17:33:02.553 に答える
1

サーバーに、DateTimeとともにタイマーを開始するためのシグナルを与えることができます。メッセージと同時にタイマーを開始する代わりに、メッセージが送信されてから数秒後に発生するDateTimeをクライアントに提供します。そうすれば、クライアントはメッセージを受信するとすぐにタイマーを開始せず、ラグのあるクライアントが「追いつく」ことができます。(たとえば、信号は7:00:00 AMに送信され、時刻は7:00:05になります。クライアントはメッセージを受信すると、7:00:05までタイマーの開始を待機するため、すべてのタイマーは次の時間に開始できます。同時に。)

于 2012-12-04T18:59:41.600 に答える