返回

2 天做了个多人实时对战,200ms 延迟竟然也能丝滑流畅?

前端

前言

网络游戏因其延迟问题而臭名昭著,这使得它们难以像单机游戏那样丝滑流畅。对于多人实时对战游戏来说,这个问题尤其严重,因为即使是微小的延迟也会导致游戏体验受到影响。

然而,最近的一个实践项目表明,在 200 毫秒的延迟下,多人实时对战也能做到单机游戏般的丝滑流畅。本文将详细介绍该项目的实现方案,并探讨如何使用 TSRPC 和 Cocos 等关键技术来创建低延迟的多人实时对战游戏。

技术栈

该项目使用了以下技术栈:

  • TSRPC:一个高性能、低延迟的远程过程调用框架
  • Cocos:一个流行的游戏引擎,支持 2D 和 3D 游戏开发
  • Unity:一个流行的游戏引擎,主要用于开发 3D 游戏

架构设计

该项目的架构设计如下图所示:

[图片:项目架构设计图]

该架构将游戏逻辑分为两层:

  • 服务器层: 负责维护游戏状态并处理玩家输入。
  • 客户端层: 负责渲染游戏并接收玩家输入。

服务器层和客户端层通过 TSRPC 进行通信。TSRPC 是一种高性能、低延迟的远程过程调用框架,非常适合多人实时对战游戏。

帧同步和状态同步

为了确保所有玩家看到相同的游戏状态,该项目使用了帧同步和状态同步相结合的方式。

  • 帧同步: 在每个游戏循环中,服务器都会向所有客户端发送游戏状态的更新。客户端收到更新后,会根据更新来更新自己的游戏状态。
  • 状态同步: 如果某个客户端的游戏状态与服务器不同,客户端会向服务器发送一个状态同步请求。服务器收到请求后,会将游戏的完整状态发送给客户端。

在延迟情况下实现技能判定

在延迟情况下实现技能判定是一个挑战。为了解决这个问题,该项目使用了以下技术:

  • 输入预测: 客户端会预测玩家的输入,并在收到服务器确认之前执行技能。
  • 服务器验证: 服务器收到玩家的技能输入后,会验证输入是否有效。如果输入有效,服务器会执行技能并向所有客户端发送更新。
  • 回滚: 如果服务器验证失败,服务器会向客户端发送一个回滚命令。客户端收到回滚命令后,会回滚到技能执行前的状态。

TSRPC 和 Cocos 的使用

TSRPC 和 Cocos 是该项目中使用的两个关键技术。

  • TSRPC: TSRPC 用于服务器层和客户端层之间的通信。它提供了高性能、低延迟的远程过程调用,非常适合多人实时对战游戏。
  • Cocos: Cocos 用于客户端层的渲染。它是一个流行的游戏引擎,支持 2D 和 3D 游戏开发。

性能优化

为了提高游戏的性能,该项目使用了以下优化技术:

  • 减少网络流量: 使用高效的数据格式来减少网络流量。
  • 并行处理: 使用多线程来并行处理游戏逻辑。
  • 缓存: 缓存游戏资源以减少加载时间。

结论

该实践项目表明,在 200 毫秒的延迟下,多人实时对战也能做到单机游戏般的丝滑流畅。通过使用帧同步、状态同步、输入预测和服务器验证等技术,以及 TSRPC 和 Cocos 等关键技术,开发者可以创建低延迟的多人实时对战游戏,为玩家提供身临其境的、令人兴奋的游戏体验。