1 网络概述

在多人游戏会话中,游戏状态信息将通过互联网连接在多台机器之间通信,而非单独驻留于一台计算机上。玩家之间的信息共享十分微妙,并会增加部分额外步骤,因此此操作导致多人游戏编程比单人游戏编辑复杂。虚幻引擎 提供的网络框架非常强大,支持部分世界上最流行的网络游戏,可简化此流程。本页对驱动多人游戏编程的概念和可使用的网络游戏构建工具进行了概述。

1.1 尽早规划多人游戏

若项目可能需要多人游戏功能,则从项目开始阶段起,构建所有gameplay时都应将多人游戏功能考虑在内。若开发团队通常会在创建多人游戏时实施额外步骤,相较于单人游戏,构建gameplay的流程并不会耗时过久。长远来看,项目将便于整个团队进行调试和维护。同时,虚幻引擎中编写的多人游戏gameplay仍可在单人游戏中使用。
但是,重构无网络情况下编译的基本代码需要梳理整个项目,几乎所有gameplay都需要重新编写。届时,开发团队成员需重新学习可能早已熟悉的编程实操。同时,网速和稳定的相关技术瓶颈也会让你措手不及。
相较于初期规划,在项目后期引入网络功能会占用大量资源,且极为复杂。因此,除非确定项目无需多人游戏功能,否则应 始终 按多人游戏方向进行编程。

1.2 客户端-服务器模型

在单人游戏或本地多人游戏中,游戏在 独立 游戏上本地运行。玩家将输入连接到一台计算机,直接控制其上所有内容,而包括Actor、场景和各玩家的用户界面在内的所有游戏项目均存在于这台本地机器上。


单人游戏和本地多人游戏都仅在一台机器上执行。

在网络多人游戏中,虚幻引擎使用 客户端-服务器 模型。网络中的一台计算机作为 服务器 主持多人游戏会话,而所有其他玩家的计算机作为 客户端 连接到该服务器。然后,服务器与连接的客户端分享游戏状态信息,并提供一种客户端之间通信的方法。

在网络多人游戏中,游戏将在服务器(1)与多个与之连接的客户端(2)之间进行。服务器处理gameplay,客户端向用户显示游戏。

**服务器作为游戏主机,保留一个真实 授权 的游戏状态。**换句话说,服务器是多人游戏实际发生的地方客户端会远程控制其在服务器上各自拥有的 Pawn,发送过程调用以使其执行游戏操作。但服务器不会将视觉效果直接流送至客户端显示器。服务器会将游戏状态信息 复制 到各客户端,告知应存在的Actor、此类Actor的行为,以及不同变量应拥有的值。然后各客户端使用此信息,对服务器上正在发生的情况进行高度模拟。
欲了解客户端与服务器之间的连接过程的相关额外技术信息,参见客户端-服务器模型 上的指南。

1.2.1 客户端-服务器游戏范例

我们将在多人游戏中以两个玩家为例,说明此过程对gameplay编程实践的改变方式。我们称他们为 玩家1 和 玩家2,并分析两人互射发射物的过程。

在网络多人游戏中,游戏将在服务器(1)与多个与之连接的客户端(2)之间进行。服务器处理gameplay,客户端向用户显示游戏。

独立游戏中,此类所有交互都在同一台机器上的同一 场景 中发生,因此理解和编程均较为简单。例如,生成对象时,你可以认为所有玩家均能看到此对象。
在网络游戏中,此类交互发生在多个不同场景:服务器上的场景、玩家1客户端的场景、玩家2客户端的场景,以及参与会话的其他所有客户端的额外场景。每台不同机器上的各场景均有各自Pawn、武器及发射物的副本。服务器是游戏真正运行的地方,但我们要让客户端的场景看似发生了相同事件。因此,需要选择性地向各客户端发送信息,以在服务器上创建场景的视觉代表。

这一过程将在基础游戏交互(碰撞、移动、伤害)、美化效果(视觉效果和音效)和私人玩家信息(HUD更新)间进行划分。这三者各自与网络中的特定机器或机组关联。但是,**此信息的复制过程并非完全自动,游戏编程时须指定要复制的信息和接收副本的机器。主要的难点在于选择应复制的信息及方式,以向所有玩家提供一致的游戏体验,同时需最小化信息复制量,尽可能减少网络带宽占用率。**加粗样式

更多推荐

UE4联网机制和多人游戏总结 (第一部分)