2012-12-03 20 views
2

我正在Unity3D中開發多人遊戲,我希望有一些同步幫助。其中一名球員充當服務器,其他人都是客戶端。在遊戲的某個時刻,所有玩家在進入下一步遊戲之前都有10秒的時間回答問題。他們回答問題所需的時間被記錄下來並用於找出最快的答案,所以所有客戶同時啓動他們的計時器非常重要。在每個客戶端同時啓動計時器

就信息傳遞而言,構造這種結構的最佳方式是什麼?這些消息將包含哪些信息?

事情我已經試過/念頭:

  • 服務器開始計時,並告訴大家這樣做。問題:如果任何客戶滯後,這個問題會在不同的時間出現。
  • 服務器啓動計時器並告訴大家計時器啓動的DateTime。問題:如果客戶滯後,他會立即跳到特定的時間而不是開始。

在此先感謝。

回答

1

您可以讓服務器發出信號以啓動計時器以及DateTime。而不是與消息同時啓動計時器,而是在發送消息後的幾秒鐘內爲客戶端提供日期時間。這樣,客戶在收到信息後就不會啓動計時器,從而使滯後的人能夠「趕上」。 (例如,信號在上午7:00:00發送,包含時間7:00:05當客戶收到消息時,他們等待啓動定時器直到7:00:05,所有定時器都可以啓動)

1

根據你爲誰開發遊戲,你總是可以讓客戶端處理時間。讓服務器爲客戶端提供信號以顯示問題並啓動計時器,然後等待響應。然後,每個客戶可以定時用戶,並將時間與用戶的答案一起給予服務器。只要服務器給客戶端幾秒鐘的「緩衝區」,它應該以準確的時間接收所有的答案,不管有多少滯後。

唯一的問題是,再次取決於您的受衆,用戶可能會篡改發送的數據。

+0

我現在可以篡改了,因爲這更像是一個概念驗證。然而,這也與我的第一個解決方案有相同的問題,即根據他們的滯後時間,他們將在不同的時間啓動他們的計時器,因爲來自服務器的信號來得遲。 – pek

+0

@pek如果存在滯後並且特定用戶晚於其他用戶給出問題,則只要客戶計時器用於記錄開始和結束時間,問題出現與回答之間的時間量應該是準確的。我想我要說的是,如果答案是相對於客戶來說是可以的,這應該是有效的 - 即使有滯後。 – Curlystraw

+1

@pek客戶會將他們的完成時間返回到服務器,相對於他們自己的開始時間。在宣佈獲勝者之前,服務器只需等待所有N個響應進入。如果時間發生在客戶端,則需要處理的唯一問題是如果用戶在應答之前斷開連接,會發生什麼情況。 – Jerdak

相關問題