《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://xiahunao.cn/news/2780195.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

图灵日记--MapSet字符串常量池反射枚举Lambda表达式泛型

目录 搜索树概念实现性能分析和 java 类集的关系 搜索概念及场景模型 Map的使用Map常用方法 Set的说明常见方法说明 哈希表冲突-避免-负载因子调节冲突-解决-闭散列冲突-解决-开散列/哈希桶冲突严重时的解决办法 实现和 java 类集的关系 字符串常量池String对象创建intern方法 …

SpringCloud-Eureka服务注册中心测试实践

5. Eureka服务注册中心 5.1 什么是Eureka Netflix在涉及Eureka时,遵循的就是API原则.Eureka是Netflix的有个子模块,也是核心模块之一。Eureka是基于REST的服务,用于定位服务,以实现云端中间件层服务发现和故障转移,服…

Junit5基础教程

文章目录 一,导入依赖二,基本功能一、常用断言二、执行顺序和常用注解1、通过BeforeAll类的注解来保证顺序2、通过order注解来保证执行顺序 三、依赖测试四、参数化测试五、测试套件SelectPackages、IncludePackages、SelectClasses、IncludeTags等注解的…

C语言printf函数详解..

1.printf函数解析 前面我们有讲过printf函数的格式为: printf(“占位1 占位2 占位3……”, 替代1, 替代2, 替代3……); 今天我们进一步深入的解析一下这个函数 2.printf函数的特点 1.printf函数是一个变参函数(即参数的数量和类型都不确定) 2.printf函数的第一个…

【MySQL】——数值函数的学习

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-Z1fAnfrxGD7I5gqp {font-family:"trebuchet ms",verdana,arial,sans-serif;font-siz…

bugku 1

Flask_FileUpload 文件上传 先随便传个一句话木马 看看回显 果然不符合规定 而且发现改成图片什么的都不行 查看页面源代码,发现提示 那应该就要用python命令才行 试试ls 类型要改成图片 cat /flag 好像需要密码 bp爆破 根据提示,我们先抓包 爆破 …

ChatGPT高效提问—prompt常见用法(续篇九)

ChatGPT高效提问—prompt常见用法(续篇九) ​ 如何准确地向大型语言模型提出问题,使其更好地理解我们的意图,从而得到期望的答案呢?编写有效的prompt的技巧,精心设计的prompt,获得期望的的答案。 1.1 增加条件 ​ 在各种prompt技巧中,增加条件是最常用的。在prompt中…

MOMENTUM: 1

攻击机 192.168.223.128 目标机 192.168.223.146 主机发现 nmap -sP 192.168.223.0/24 端口扫描 nmap -sV -p- -A 192.168.223.146 开启了22 80端口 看一下web界面 随便打开看看 发现这里有个参数id,sql尝试无果,发现写入什么,网页显示…

【数据结构】11 堆栈(顺序存储和链式存储)

定义 可认为是具有一定约束的线性表,插入和删除操作都在一个称为栈顶的端点位置。也叫后入先出表(LIFO) 类型名称:堆栈(STACK) 数据对象集: 一个有0个或者多个元素的有穷线性表。 操作集&#…

Obsidian Publish的开源替代品Perlite

前几天就有网友跟我说,freenom 的免费域名不可用了,10 号的时候老苏进后台看了一下,还有一半的域名显示为 ACTIVE,似乎是以 2024年6月 为限。但到 11 号,老苏发现博客 (https://laosu.cf) 已经访问不了了,这…

【Linux】信号保存与信号捕捉处理

信号保存与信号捕捉 一、信号保存1. 信号的发送2. 理解信号保存(1)信号保存原因(2)信号保存概念 3. 信号保存系统接口(1)sigset_t(2)sigprocmask()(3)sigpend…

GraphicsMagick 的 OpenCL 开发记录(三十七)

文章目录 如何写ScaleImage()的硬件加速函数&#xff08;十一&#xff09; <2022-05-06 周五> 如何写ScaleImage()的硬件加速函数&#xff08;十一&#xff09; “如何写ScaleImage()的硬件加速函数&#xff08;十&#xff09;”这里的代码写得比较随意&#xff0c;其中…

vscode远程连接失败

目录 解决方案尝试1解决方案尝试2 解决方案尝试1 最近通过vscode一直使用腾讯云的服务器作为远程开发环境&#xff0c;以前一直很好用。 直到最近重装了系统之后&#xff0c;发现vscode没法对云服务器进行连接了&#xff0c;即使在远程主机添加了本地的公钥也不行。直接报错:…

python-自动化篇-终极工具-用GUI自动控制键盘和鼠标-pyautogui

文章目录 用GUI自动控制键盘和鼠标pyautogui 模块鼠标屏幕位置——移动地图——pyautogui.size鼠标位置——自身定位——pyautogui.position()移动鼠标——pyautogui.moveTo拖动鼠标滚动鼠标 键盘按下键盘释放键盘 开始与结束通过注销关闭所有程序 用GUI自动控制键盘和鼠标 在…

springboot178智能学习平台系统

简介 【毕设源码推荐 javaweb 项目】基于springbootvue 的 适用于计算机类毕业设计&#xff0c;课程设计参考与学习用途。仅供学习参考&#xff0c; 不得用于商业或者非法用途&#xff0c;否则&#xff0c;一切后果请用户自负。 看运行截图看 第五章 第四章 获取资料方式 **项…

正则可视化工具:学习和编写正则表达式的利器

引言 正则表达式是一种强大的文本匹配和处理工具&#xff0c;但对于初学者和非专业开发者来说&#xff0c;编写和理解正则表达式可能是一项具有挑战性的任务。为了帮助人们更好地学习和编写正则表达式&#xff0c;正则可视化工具应运而生。本文将探讨正则可视化工具的优点&…

Infuse通过Alist添加115网盘资源

说明 通过Alist代理管理115网盘&#xff0c;Infuse再添加Alist代理的115网盘的WebDAV 准备一台Linux服务器安装Alist 我这里用的华为云CentOS7&#xff0c;使用Docker容器 安装Alist docker run -d --restartalways -v /etc/alist:/opt/alist/data -p 5244:5244 -e PUID0 …

Javaweb之SpringBootWeb案例之事务进阶的详细解析

1.3 事务进阶 前面我们通过spring事务管理注解Transactional已经控制了业务层方法的事务。接下来我们要来详细的介绍一下Transactional事务管理注解的使用细节。我们这里主要介绍Transactional注解当中的两个常见的属性&#xff1a; 异常回滚的属性&#xff1a;rollbackFor 事…

Days28 ElfBoard 板]修改开机动画

1.可能需要安装的库 elfubuntu:~/work/psplash$ sudo apt-get install build-essential libncurses5-dev elfubuntu:~/work/psplash$ sudo apt-get install libtool elfubuntu:~/work/psplash$ sudo apt-get install gettext elfubuntu:~/work/psplash$ sudo apt-get install l…

Tied Block Convolution: 具有共享较薄滤波器的更简洁、更出色的CNN

摘要 https://arxiv.org/pdf/2009.12021.pdf 卷积是卷积神经网络&#xff08;CNN&#xff09;的主要构建块。我们观察到&#xff0c;随着通道数的增加&#xff0c;优化后的CNN通常具有高度相关的滤波器&#xff0c;这降低了特征表示的表达力。我们提出了Tied Block Convolutio…