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

Networking 在每个客户端上同时启动计时器,networking,client-server,unity3d,Networking,Client Server,Unity3d,我正在Unity3D中开发一个多人游戏,我想获得一些同步方面的帮助。其中一个玩家充当服务器,其他所有人都是客户端。在游戏的某个时刻,所有玩家在进入游戏的下一步之前都有10秒钟的时间回答问题。他们回答问题所花费的时间会被记录下来,并用于找出最快的答案,因此所有客户机同时启动计时器是非常关键的 就消息传递而言,构建此结构的最佳方式是什么?这些信息将包含哪些信息 我尝试/思考过的事情: 服务器启动计时器并告诉每个人也这样做。问题:如果任何客户落后,问题会在不同的时间弹出 服务器启动计时器并告诉每个人

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

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

我尝试/思考过的事情:

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

提前感谢。

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


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

您可以让服务器发出启动计时器的信号以及日期时间。不要在消息发送的同时启动计时器,而是在消息发送几秒钟后给客户端一个DateTime。这样一来,客户机不会在收到消息后立即启动计时器,让那些有延迟的客户能够“赶上”
(例如,信号在早上7:00:00发送,包含时间7:00:05。当客户端收到消息时,他们会等到7:00:05启动计时器,这样所有计时器都可以同时启动。)

我现在对篡改没有意见,因为这更像是一个概念证明。但是,这也有与我的第一个解决方案相同的问题,即,根据他们的延迟,他们将在不同的时间启动计时器,因为来自服务器的信号延迟。@pek如果有延迟,并且某个特定用户比其他用户晚收到问题,只要客户的计时器用于记录开始和结束时间,问题出现和答案之间的时间量就应该是准确的。我想我想说的是,如果答案可以相对于客户计时,即使有延迟,这也应该有效。@pek客户端会将其完成时间返回到服务器,相对于它们自己的开始时间。服务器只需等待所有N个响应进入,然后才能宣布获胜者。如果定时发生在客户端,那么您需要处理的唯一问题就是如果用户在应答之前断开连接会发生什么。我明白了。我当然可以做到,但是如果我想让他们同时开始,我是不是要求太多了?这正是我要找的。@pek你可以让服务器发出启动计时器的信号,并附上日期时间。不要在消息发送的同时启动计时器,而是在消息发送几秒钟后给客户端一个DateTime。这样,客户端不会在收到消息后立即启动计时器,从而允许那些有延迟的人“赶上”。(例如,信号在上午7:00:00发送,包含时间7:00:05。当客户端收到消息时,他们会等到7:00:05才启动计时器,因此所有计时器都可以同时启动。)