《UE5_C++多人TPS完整教程》学习笔记2 ——《P3 多人游戏概念(Multiplayer Concept)》


本文为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 使用的使用授权/权威/含有主控服务器的客户端/服务器模型。
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/255927.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据结构:并查集讲解

并查集 1.并查集原理2.并查集实现3.并查集应用4.并查集的路径压缩 1.并查集原理 在一些应用问题中,需要将n个不同的元素划分成一些不相交的集合。开始时,每个元素自成一个单元素集合,然后按一定的规律将归于同一组元素的集合合并。在此过程中…

分享88个鼠标特效,总有一款适合您

分享88个鼠标特效,总有一款适合您 88个鼠标特效下载链接:https://pan.baidu.com/s/1ljcxwgXGpw7baiufUGJjZA?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

5G NR 频率计算

5G中引入了频率栅格的概念,也就是小区中心频点和SSB的频域位置不能随意配置,必须满足一定规律,主要目的是为了UE能快速的搜索小区;其中三个最重要的概念是Channel raster 、synchronization raster和pointA。 1、Channel raster …

Hive正则表达式

Hive版本:hive-3.1.2 一、Hive的正则表达式概述 正则表达式是一种用于匹配和操作文本的强大工具,它是由一系列字符和特殊字符组成的模式,用于描述要匹配的文本模式。 Hive的正则表达式灵活使用解决HQL开发过程中的很多问题,本篇文…

H12-821_26

26.下列选项中,哪些路由前缀满足下面的IP-Prefix条件? A.20.0.1.0/24 B.20.0.1.0/23 C.20.0.1.0/25 D.20.0.1.0/28 答案:ACD 注释: 前缀列表可以匹配路由前缀和网络掩码。 ip ip-prefix test index 10 permit 20.0.0.0 16 greater-equal 24 less-equal…

Zephyr NRF7002 实现AppleJuice

BLE的基础知识 ble的信道和BR/EDR的信道是完全不一样的。但是范围是相同的,差不多也都是2.4Ghz的频道。可以简单理解为空中有40个信道0~39信道。两个设备在相同的信道里面可以进行相互通信。 而这些信道SIG又重新编号: 这个编号就是把37 38 39。 3个信道…

Seurat - 聚类教程 (1)

设置 Seurat 对象 在本教程[1]中,我们将分析 10X Genomics 免费提供的外周血单核细胞 (PBMC) 数据集。在 Illumina NextSeq 500 上对 2,700 个单细胞进行了测序。可以在此处[2]找到原始数据。 我们首先读取数据。 Read10X() 函数从 10X 读取 cellranger 管道的输出&…

Linux network namespace 访问外网以及多命名空间通信(经典容器组网 veth pair + bridge 模式认知)

写在前面 整理K8s网络相关笔记博文内容涉及 Linux network namespace 访问外网方案 Demo实际上也就是 经典容器组网 veth pair bridge 模式理解不足小伙伴帮忙指正 不必太纠结于当下,也不必太忧虑未来,当你经历过一些事情的时候,眼前的风景已…

数据结构第十四天(树的存储/双亲表示法)

目录 前言 概述 接口: 源码: 测试函数: 运行结果: 往期精彩内容 前言 孩子,一定要记得你的父母啊!!! 哈哈,今天开始学习树结构中的双亲表示法,让孩…

H12-821_74

74.在某路由器上查看LSP,看到如下结果: A.发送目标地址为3.3.3.3的数据包时,打上标签1026,然后发送。 B.发送目标地址为4.4.4.4的数据包时,不打标签直接发送。 C.当路由器收到标签为1024的数据包,将把标签…

MySQL数据库⑦_复合查询+内外链接(多表/子查询)

目录 1. 回顾基本查询 2. 多表查询 2.1 笛卡尔积初步过滤 3. 自连接 4. 子查询 4.1 单行子查询 4.2 多行子查询 4.2 多列子查询 4.2 from子句中使用子查询 5. 合并查询 6. 内外链接 6.1 内连接 6.2 左外链接 6.2 右外连接 本篇完。 1. 回顾基本查询 先回顾一下…

架构整洁之道-软件架构-展示器和谦卑对象、不完全边界、层次与边界、Main组件、服务

6 软件架构 6.9 展示器和谦卑对象 在《架构整洁之道-软件架构-策略与层次、业务逻辑、尖叫的软件架构、整洁架构》有我们提到了展示器(presenter),展示器实际上是采用谦卑对象(humble object)模式的一种形式&#xff…

【深度优先搜索】【树】【图论】2973. 树中每个节点放置的金币数目

作者推荐 视频算法专题 本博文涉及知识点 深度优先搜索 树 图论 分类讨论 LeetCode2973. 树中每个节点放置的金币数目 给你一棵 n 个节点的 无向 树,节点编号为 0 到 n - 1 ,树的根节点在节点 0 处。同时给你一个长度为 n - 1 的二维整数数组 edges…

寒假作业

手写盗版微信登入界面 #include "mainwindow.h" #include "ui_mainwindow.h"MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow) {ui->setupUi(this);this->resize(421,575);this->setFixedSize(421,575);th…

05-Java原型模式 ( Prototype Pattern )

原型模式 摘要实现范例 原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能原型模式实现了一个原型接口,该接口用于创建当前对象的克隆当直接创建对象的代价比较大时,则采用这种模式 例如&#xff0c…

分享88个文字特效,总有一款适合您

分享88个文字特效,总有一款适合您 88个文字特效下载链接:https://pan.baidu.com/s/1Y0JCf4vLyxIJR6lfT9VHvg?pwd8888 提取码:8888 Python采集代码下载链接:采集代码.zip - 蓝奏云 学习知识费力气,收集整理更不…

SpringMVC第二天

一、SSM整合【重点】 1 SSM整合配置 问题导入 请描述“SSM整合流程”中各个配置类的作用? 1.1 SSM整合流程 创建工程 SSM整合 Spring SpringConfig MyBatis MybatisConfig JdbcConfig jdbc.properties SpringMVC ServletConfig SpringMvcConfig 功能模块…

【ES】--Elasticsearch的分词器深度研究

目录 一、问题描述及分析二、analyze分析器原理三、 multi-fields字段支持多场景搜索(如同时简繁体、拼音等)1、ts_match_analyzer配置分词2、ts_match_all_analyzer配置分词3、ts_match_1_analyzer配置分词4、ts_match_2_analyzer配置分词5、ts_match_3_analyzer配置分词6、ts…

Python爬虫http基本原理#2

Python爬虫逆向系列(更新中):http://t.csdnimg.cn/5gvI3 HTTP 基本原理 在本节中,我们会详细了解 HTTP 的基本原理,了解在浏览器中敲入 URL 到获取网页内容之间发生了什么。了解了这些内容,有助于我们进一…

Elasticsearch:使用 LangChain 文档拆分器进行文档分块

使用 Elasticsearch 嵌套密集向量支持 这个交互式笔记本将: 将模型 “sentence-transformers__all-minilm-l6-v2” 从 Hugging Face 加载到 Elasticsearch ML Node 中使用 LangChain 分割器将段落分块成句子,并使用嵌套密集向量将它们索引到 Elasticse…