在每个客户端上同时启动计时器

时间:2012-12-03 17:26:09

标签: networking client-server unity3d

我正在开发Unity3D中的多人游戏,我想要一些同步帮助。其中一个玩家充当服务器,其他人都是客户。在游戏中的某个时刻,所有玩家在进入下一步游戏之前都有10秒的时间回答问题。他们回答问题的时间被记录下来并用于找出最快的答案,因此所有客户同时启动他们的计时器非常关键。

就消息传递而言,构建此消息的最佳方法是什么?这些消息包含哪些信息?

我尝试/想过的事情:

  • 服务器启动计时器并告诉每个人也这样做。问题:如果任何客户端滞后,问题会在不同时间弹出。
  • 服务器启动计时器并告诉每个人计时器启动的DateTime。问题:如果客户端滞后,他会立即跳到特定时间而不是开始。

提前致谢。

2 个答案:

答案 0 :(得分:1)

根据您正在开发游戏的人,您可以随时让客户处理时间。让服务器为客户端提供信号以显示问题并启动计时器,然后等待响应。然后,每个客户端可以为用户计时,并将时间与用户的答案一起提供给服务器。只要服务器为客户端提供几秒钟的“缓冲”,它就应该以准确的时间接收所有答案,无论有多少滞后。

唯一的问题是,再次取决于您的受众,用户可能会篡改发送的数据。

答案 1 :(得分:1)

您可以让服务器给出启动计时器的信号以及DateTime。不是在消息的同时启动计时器,而是在发送消息后几秒钟向客户端发出DateTime。这样,客户端一旦收到消息就不会启动计时器,从而允许滞后的用户“赶上”。 (例如,信号在上午7:00:00发送,包含时间7:00:05。当客户收到消息时,他们等待启动计时器直到7:00:05,所以所有计时器都可以从同时。)