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

news2024/12/29 10:01:51

本文为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.coloradmin.cn/o/1445045.html

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

相关文章

人工智能(pytorch)搭建模型24-SKAttention注意力机制模型的搭建与应用场景

大家好,我是微学AI,今天给大家介绍一下人工智能(pytorch)搭建模型24-SKAttention注意力机制模型的搭建与应用场景,本文将介绍关于SKAttention注意力机制模型的搭建,SKAttention机制具有灵活性和通用性,可应用于计算机视…

电视上如何下载软件

电视上如何下载软件,告诉大家一个简单的方法,可以用DT浏览器下载软件,然后会自动安装这个软件,如有技术问题,可以免费解答

4、解构三个重要的Pipeline(SD-Inpainting, ControlNet, AnimateDiff) [代码级手把手解析diffusers库]

上一篇我们解析了所有Pipeline的基类DiffusionPipeline。后续各种各样的pipeline都继承了DiffusionPipeline的模型加载保存等功能,然后再配合各个组件实现各种的结构即可。 事实上,一个Pipeline通常包含了如下模块(from_pretrained函数根据model_index.json文件new了一个Pipe…

disql备份还原

disql备份还原 前言 本文档根据官方文档,进行整理。 一、概述 在 disql 工具中使用 BACKUP 语句你可以备份整个数据库。通常情况下,在数据库实例配置归档后输入以下语句即可备份数据库: BACKUP DATABASE BACKUPSET db_bak_01;语句执行完…

spring boot(2.4.x 开始)和spring cloud项目中配置文件application和bootstrap加载顺序

在前面的文章基础上 https://blog.csdn.net/zlpzlpzyd/article/details/136060312 spring boot 2.4.x 版本之前通过 ConfigFileApplicationListener 加载配置 https://github.com/spring-projects/spring-boot/blob/v2.3.12.RELEASE/spring-boot-project/spring-boot/src/mai…

使用耳机壳UV树脂制作私模定制耳塞有哪些选择呢?

私模定制耳塞人士的选择可以从以下几个方面考虑: 专业经验:选择有丰富经验的私模定制耳塞人士,能够更好地理解用户需求,提供更专业的建议和服务。可以通过查看其作品和客户评价来了解其经验和口碑。材料质量:选择使用…

第五篇:MySQL常见数据类型

MySQL中的数据类型有很多,主要分为三类:数值类型、字符串类型、日期时间类型 三个表格都在此网盘中,需要者可移步自取,如果觉得有帮助希望点个赞~ MySQL常见数据类型表 数值类型 (注:decimal类型举例,如1…

【闲谈】开源软件的崛起与影响

随着信息技术的快速发展,开源软件已经成为软件开发的趋势,并产生了深远的影响。开源软件的低成本、可协作性和透明度等特点,使得越来越多的企业和个人选择使用开源软件,促进了软件行业的繁荣。然而,在使用开源软件的过…

STM32 STD/HAL库驱动W25Q64模块读写字库数据+OLED0.96显示例程

STM32 STD/HAL库驱动W25Q64 模块读写字库数据OLED0.96显示例程 🎬原创作者对W25Q64保存汉字字库演示: W25Q64保存汉字字库 🎞测试字体显示效果: 📑功能实现说明 利用W25Q64保存汉字字库,OLED显示汉字的时…

vue electron 应用在windows系统上以管理员权限打开应用

打开package.json文件,在build下的win增加配置 "requestedExecutionLevel": "requireAdministrator",

商汤科技「日日新4.0」正式发布,多维度升级大模型体系,能力比肩GPT-4!

文 | BFT机器人 近日,商汤科技正式发布「日日新SenseNova 4.0」,宣告大模型体系多维度全面升级。这款模型具备更全面的知识覆盖、更可靠的推理能力,以及更优越的长文本理解和数字推理能力。同时,它还支持跨模态交互,为…

给定具体日期 返回给定日期是星期几 calendar.weekday(year,month,day)

【小白从小学Python、C、Java】 【计算机等考500强证书考研】 【Python-数据分析】 给定具体日期 返回给定日期是星期几 calendar.weekday(year,month,day) [太阳]选择题 如果2024年2月12日是星期一,请问最后一个print语句的运行结果是? import calenda…

【Spring学习】Spring Data Redis:RedisTemplate、Repository、Cache注解

1,spring-data-redis官网 1)特点 提供了对不同Redis客户端的整合(Lettuce和Jedis)提供了RedisTemplate统一API来操作Redis支持Redis的发布订阅模型支持Redis哨兵和Redis集群支持基于Lettuce的响应式编程支持基于JDK、JSON、字符…

【教3妹学编程-算法题】执行操作后的最大分割数量

2哥 : 3妹,今年过年收到压岁钱了没呢。 3妹:切,我都多大了啊,肯定没收了啊 2哥 : 俺也一样,不仅没收到,小侄子小外甥都得给,还倒贴好几千 3妹:哈哈哈哈,2叔叔&#xff0c…

JAVA学习笔记9

1.Java API 文档 1.java类的组织形式 2.字符类型(char) 1.基本介绍 ​ *字符类型可以表示单个字符,字符类型是char,char是两个字节(可以存放汉字),多个字符我们用字符串String ​ eg:char c1 ‘a’; ​ char c2…

AJAX——常用请求方法

1 请求方法 请求方法:对服务器资源,要执行的操作 2 数据提交 场景:当数据需要在服务器上保存 3 axios请求配置 url:请求的URL网址 method:请求的方法,GET可以省略(不区分大小写) …

牛客网SQL进阶114:更新记录

官网链接: 更新记录(二)_牛客题霸_牛客网现有一张试卷作答记录表exam_record,其中包含多年来的用户作答试卷记录,结构如下表。题目来自【牛客题霸】https://www.nowcoder.com/practice/0c2e81c6b62e4a0f848fa7693291d…

Excel下载接口

💗wei_shuo的个人主页 💫wei_shuo的学习社区 🌐Hello World ! Excel下载接口 需求分析 页面表格的数据下载,保存到Excel表格搜索后的数据点击下载,下载的数据需要是搜索后的数据 Controller HTTP 响应对象:…

【HTTP】localhost和127.0.0.1的区别是什么?

目录 localhost是什么呢? 从域名到程序 localhost和127.0.0.1的区别是什么? 域名的等级划分 多网站共用一个IP和端口 私有IP地址 IPv6 今天在网上逛的时候看到一个问题,没想到大家讨论的很热烈,就是标题中这个: …

python常用的深度学习框架

目录 一:介绍 二:使用 Python中有几个非常受欢迎的深度学习框架,它们提供了构建和训练神经网络所需的各种工具和库。以下是一些最常用的Python深度学习框架: 一:介绍 TensorFlow:由Google开发的TensorF…