本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P3 多人游戏概念(Multiplayer Concept)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。


文章目录

  • P3 多人游戏概念
  • 3.1 多人游戏
    • 3.1.1 单人游戏的定义
    • 3.1.2 多人游戏的定义
  • 3.2 点对点或对等模式
  • 3.3 客户端-服务器模型
    • 3.3.1 使用监听服务器实现客户端-服务器模型
    • 3.3.2 使用专用服务器实现客户端-服务器模型
  • 3.4 虚幻引擎用使用的网络模型
  • 3.5 Summary

P3 多人游戏概念

本节课将了解多人游戏的架构(How multiplayer games are architected)以及点对点模型(Peer-to-Peer,P2P)和客户端-服务器模型(Client-Server),并了解了虚幻引擎使用的是哪一种模型。


3.1 多人游戏

3.1.1 单人游戏的定义

单人游戏(Single Player Game)由单台计算机上运行的单个游戏会话组成(下图左边);这类游戏可以在同一台机器上使用分屏(split screen)并接受多个设备(multiple devices)输入来配置(configure)游戏(下图右边),但这类游戏本质上是不需要通过互联网将信息传输到另一台机器的实例(instance)上的,因此也被称为本地多人游戏(Local Multiplayer Game)。

3.1.2 多人游戏的定义

  • 多人游戏(Multiplayer Game)本质上比单人游戏复杂,因为在这类游戏中,两个或多个实例(instance)分别在不同的独立的(separate)机器上运行,并且多个玩家都可以提供输入来控制角色(control a character),从而改变游戏中的各种参数。
  • 对于可能会更改游戏参数的信息,需要将发送到多人游戏的其他实例上。例如,玩家一的角色移动信息必须发送到玩家二的机器,但是玩家二也会移动他们的角色,所以玩家二的角色移动信息必须发送回玩家一的机器。
  • 所以问题的关键在于我们如何传输这些信息。下面将介绍两种模式,它们可以构建一个在游戏会话之间共享信息的系统。


3.2 点对点或对等模式

  • 传输信息的最简单方法之一是通过点对点或对等(Peer-to-Peer,P2P)连接,比如每当玩家一移动他们的角色时,他必须将该信息发送给玩家二和玩家三;当玩家二移动他们的角色时,他们现在必须将该信息发送给玩家一和玩家三;同样,当玩家三移动他们的角色时,他必须反过来将该信息发送给玩家一和玩家二。
  • 点对点的另一个问题是游戏没有权威(或主控)版本(Authoritative version),每个游戏实例都不一样,谁的游戏实例是正确的这个问题是没有答案的,游戏的所有实例都是不同的,并且没有一个引用(Quote)游戏的正确版本(Correct version)。


3.3 客户端-服务器模型

  • 在客户端-服务器(Client-Server)模型中,一台机器被指定为服务器,而所有其他机器被指定为客户端,每个客户端只与服务器对话(Talk to the server),他们永远不会将信息直接发送给另一个客户。
  • 每个客户端只需要满足向服务器发送和从服务器接收的带宽要求,而不发送和接收在其他机器的游戏信息,所以当玩家一移动角色时,会将移动信息发送到服务器,服务器再分发给其他客户端上的玩家,使得他们的游戏信息得以更新在屏幕上(Update on those screens)。

  • 服务器通常是权威(或主控)的(Authoritative),尽管这绝不是唯一的方法,这意味着服务器运行的游戏版本被认为是(Be deemed to be)正确的版本。
    每当玩家想要移动他们的角色时,他们实际上向服务器发送了一个请求(Request),服务器检查以确保该移动是适当的(Appropriate)之后,服务器移动角色并将移动更新信息分发给所有客户端,这种从服务器到客户端的数据分布称为 复制(Replication)

3.3.1 使用监听服务器实现客户端-服务器模型

实现客户端-服务器模型的一种方法是使用监听服务器(Listen Sever),在这种情况下,其中一台玩家机器充当服务器(Act as the server),所以当这个玩家在进行游戏时,他的机器上的游戏作为服务器版本中,会将的图形渲染到屏幕上(Render graphics to the screen)。

3.3.2 使用专用服务器实现客户端-服务器模型

  • 实现客户端-服务器模型的另一种方法是专用服务器(Dedicated Sever),在这种情况下,一台机器被指定为服务器(Be designated to be the server),但是没有人真正在这台机器上玩游戏,所以不需要渲染图形到屏幕上(Render graphics to the screen)。
  • 专用服务器允许服务器机器只处理授权/权威/主控游戏版本的模拟(Handle simulating of the authoritative version),并将数据复制到客户端的大型多人游戏(Large-scale multiplayer game)中,例如,像大型多人在线游戏Massive/Massively Multiplayer Online Game, MMOG)这样的游戏通常使用专用服务器,因为高风险(High stakes)竞技游戏会举办涉及金钱的比赛(Host tournaments where money is involved)。

  • 监听主机/服务器确实为主机玩家(Hosting player)提供了一些优势,因为移动角色不需要向服务器发送请求,由于主机玩家的机器就是服务器,因此它们没有数据传输的相关延迟时间。但是,每个客户端都必须通过向服务器发送请求并等待数据被复制回来。对于大多数小型游戏来说,互联网连接良好(Decent Internet connection),游戏信息延迟和差异(Difference)往往可以忽略不计(Negligible)。然而,随着玩家数量越来越多,对专用服务器的需求变得更加必要。

3.4 虚幻引擎用使用的网络模型

  • 虚幻引擎用使用 授权/权威/含有主控服务器Server-authoritative)的客户端-服务器模型,这意味着一台机器将始终充当服务器,而其他机器将作为客户端连接它,服务器版本是授权版本,即在任何时候都被认为是正确的版本。
  • 在虚幻引擎中测试单机游戏时,我们仍然使用的是客户端-服务器模型,恰好客户端和服务器是同一台机器。
  • 我们将在整个课程中详细了解该系统的工作原理以及如何处理游戏玩法代码(Handle gameplay code)以保持服务器对正确游戏机制(Proper gameplay mechanics)的控制。

UE4 网络连接是基于服务器/客户端模式构建。也就是说,这个模式中有一个担当主控(Authoritative)的服务器端(做出所有重要决定),用于确保所有连接的客户端可以持续更新,以便其持续获得服务器环境的最新近似复本。
在单人游戏体验中,actor 被用于呈现游戏世界。而在多人游戏中,这一点丝毫没有变化,只不过客户端将获得每个 actor 的近似复本,而服务器将保持主控(Authoritative)版本。Actor 是服务器让客户端保持最新的主要途径。当服务器需要更新特定的客户端时,服务器将收集所有的相关 actor(也就是其认定在上次更新后发生变化的 actor),然后向客户端发送足够的信息,以便让这些 actor 保持最新状态。


———《UE4 服务器模式》


3.5 Summary

本节课介绍多人游戏的概念,然后详细讲解了多人游戏的两种网络模式模型,包括点对点模式和客户端/服务器模式,最后说明了虚幻引擎 5 使用的使用授权/权威/含有主控服务器的客户端/服务器模型。