虚幻中的网络概述一

前置:在学习完turbo强大佬的多人fps之后发觉自己在虚幻网络方面还有许多基础知识不太清楚,结合安宁Ken大佬与虚幻官方文档进行补足。

补充:官方文档中的描述挺好的,自己只算是搬运和将两者结合加强理解。

学习虚幻中的网络先从虚幻网络的架构说起:

先放上一张架构总结图

虚幻中的网络概述一_第1张图片

客户端-服务器模型(C/S模式)

网络中的一台计算机作为 服务器 主持多人游戏会话,而所有其他玩家的计算机作为 客户端 连接到该服务器。然后,服务器与连接的客户端分享游戏状态信息,并提供一种客户端之间通信的方法。如下图:虚幻中的网络概述一_第2张图片

在服务器上才是多人游戏实际发生的地方

客户端会远程控制其在服务器上各自拥有的 Pawn,发送过程调用以使其执行游戏操作,但服务器不会将视觉效果直接流送至客户端显示器。服务器会将游戏状态信息 复制 到各客户端,告知应存在的Actor、此类Actor的行为,以及不同变量应拥有的值。然后各客户端使用此信息,对服务器上正在发生的情况进行高度模拟

以下是官方文档中举的一个网络多人游戏例子,分析了整个过程。此处需要时刻注意知晓的一点在客户端和服务器上都有一个玩家Pawn,客户端会远程控制其在服务器上各自拥有的 Pawn

虚幻中的网络概述一_第3张图片

玩家1在本地机器上按下输入以发射武器。

  • 玩家1的本地Pawn将武器的发射命令传送给服务器上对应的Pawn。
  • 玩家1在服务器上的武器生成发射物。
  • 服务器告知所有的客户端生成玩家1发射物的副本
  • 玩家1在服务器上的武器告知所有客户端播放武器发射音效和视觉效果。

玩家1的发射物从在服务器上的武器中射出并前移。

  • 此时,服务器告知所有客户端复制玩家1发射物发生的移动,因此各客户端上玩家1的发射物便发生相应移动。

玩家1在服务器上的发射物撞击玩家2的Pawn。

  • 碰撞触发摧毁服务器上玩家1发射物的函数。
  • 服务器自动告知所有客户端各自摧毁玩家1发射物副本。

  • 碰撞触发告知所有客户端播放附带碰撞音效和视觉效果的函数。

  • 玩家2在服务器上的Pawn承受发射物碰撞造成的伤害。

  • 玩家2在服务器上的Pawn告知玩家2客户端播放画面效果,作为对伤害的响应。

 总结:在网络游戏中,每台不同机器上的各场景均有各自的Pawn、武器及发射物的副本。服务器是游戏真正运行的地方,但我们要让客户端的场景看似发生了相同事件。因此,需要选择性地向各客户端发送信息,以在服务器上创建场景的视觉代表。


这里穿插一下虚幻中的网络模式

独立(StandAlone):游戏作为服务器运行,不接受远程客户端连接。参与游戏的玩家必须为本地玩家。此模式用于单人游戏和本地多人游戏。其将运行本地玩家适用的服务器逻辑和客户端逻辑。

客户端(As Client):游戏作为网络多人游戏会话中与服务器连接的客户端运行。其不会运行服务器逻辑。

聆听服务器(Listen Server):游戏作为主持网络多人游戏会话的服务器运行。其接受远程客户端中的连接,且直接在服务器上拥有本地玩家。此模式通常用于临时合作和竞技多人游戏。

专属服务器(Dedicated Server):游戏作为主持网络多人游戏会话的服务器运行。其接受远程客户端中的连接,但无本地玩家,因此为了高效运行,其将废弃图形、音效、输入和其他面向玩家的功能。此模式常用于需要更固定、安全和大型多人功能的游戏。

因为独立游戏服务器可同时作为服务器和客户端,为多人游戏创建的逻辑可在无需额外工作的情况下,在单人游戏中运行。

接下来介绍在服务器与客户端中分别存在的东西:

虚幻中的网络概述一_第4张图片

其中,GameMode只在服务器中存在;中间部分(GameState、Pawn、PlayerState)在服务端和客户端中都存在并且都一样,并且也是可以相互获取到的;

PlayerControlle部分,在服务端持有所有的PlayerController,客户端中分别只存在自己的Controller;

Game Instance UI在服务端和每个客户端上都是独立存在的。

这期就先到这啦~下期讲讲复制与RPC

你可能感兴趣的:(虚幻,游戏引擎)