当前位置: 首页 > article >正文

虚幻中的网络概述一

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

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

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

先放上一张架构总结图

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

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

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

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

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

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

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

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

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

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

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

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


http://www.kler.cn/news/106967.html

相关文章:

  • nexus 快速搭建-本地私有仓库 -maven
  • 浅谈数据结构之队列
  • win10安装Tensorflow(2.10-)使用最新cuda(12+),cudnn(8.9+)
  • OpenCV C++ 图像处理实战 ——《缺陷检测》
  • 【vim 学习系列文章 12 -- vimrc 那点事】
  • 05 MIT线性代数-转置,置换,向量空间Transposes, permutations, spaces
  • ant design vue 的getPopupContainer
  • 【Python机器学习】零基础掌握IsolationForest集成学习
  • Oracel增加IP白名单限制
  • uni-app小程序,uview-ui组件样式无法穿透修改的解决办法
  • 尚未解决:use_python()和use_virtualenv()的使用
  • vue3使用ref和reactive
  • uni-app/vue 文字转语音朗读(附小程序语音识别和朗读)uniapp小程序使用文字转语音播报类似支付宝收款播报小程序语音识别和朗读)
  • Python基础入门例程18-NP18 生成数字列表(列表)
  • 【2024秋招】2023-9-16 贝壳后端开发二面
  • 计算机网络重点概念整理-第一章 计算机网络概述【期末复习|考研复习】
  • 走进国产机器人领军品牌华数机器人,共探数字化变革魔力
  • 智慧停车视频解决方案:如何让AI助力停车管理升级?
  • 垃圾收费站
  • 《动手学深度学习 Pytorch版》 10.3 注意力评分函数
  • python实现批量pdf转txt和word
  • CVE-2022-32991靶场复现
  • 竞赛 深度学习实现行人重识别 - python opencv yolo Reid
  • Win10+Ubuntu20.04双系统双硬盘(SSD+HDD)安装与启动
  • 前端使用 printJS 插件打印多页:第一页空白问题解决
  • 数据结构与算法之矩阵: Leetcode 134. 螺旋矩阵 (Typescript版)
  • Spring Boot集成RESTful API
  • el-table添加固定高度height后高度自适应
  • 【前端】NodeJS核心知识点整理
  • Git(SourceTree)变基操作使用