《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.hqwc.cn/news/466815.html

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

相关文章

研究多态恶意软件,探讨网络安全与AI

前言 近期ChatGPT火遍全球,AI技术被应用到了全球各行各业当中,国内外各大厂商也开始推出自己的ChatGPT,笔者所在公司在前段时间也推出了自研的安全GPT,AI技术在网络安全行业得到了很多的应用,不管是网络安全研究人员、…

手把手教你开发Python桌面应用-PyQt6图书管理系统-修改密码UI设计实现

锋哥原创的PyQt6图书管理系统视频教程: PyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~_哔哩哔哩_bilibiliPyQt6图书管理系统视频教程 Python桌面开发 Python入门级项目实战 (无废话版) 火爆连载更新中~共计24条视频&…

如何编译zlib?

学习文章:windows zlib库编译步骤_nmake 编译 zlib-CSDN博客 记录关键步骤: 打开 执行: 先cd到该目录: C:\Users\xxx\Downloads\zlib-1.2.11\contrib\masmx86 (这是我的zlib源码的下载路径) 执行bld_ml32.bat 再…

计算机网络——08应用层原理

应用层原理 创建一个新的网络 编程 在不同的端系统上运行通过网络基础设施提供的服务,应用进程批次通信如Web Web服务器软件与浏览器软件通信 网络核心中没有应用层软件 网络核心没有应用层功能网络应用只能在端系统上存在 快速网络应用开发和部署 网络应用…

三、案例 - MySQL数据迁移至ClickHouse

MySQL数据迁移至ClickHouse 一、生成测试数据表和数据1.在MySQL创建数据表和数据2.在ClickHouse创建数据表 二、生成模板文件1.模板文件内容2.模板文件参数详解2.1 全局设置2.2 数据读取(Reader)2.3 数据写入(Writer)2.4 性能设置…

ctfshow-文件上传(web151-web161)

目录 web151 web152 web153 web154 web155 web156 web157 web158 web159 web160 web161 web151 提示前台验证不可靠 那限制条件估计就是在前端设置的 上传php小马后 弹出了窗口说不支持的格式 查看源码 这一条很关键 这种不懂直接ai搜 意思就是限制了上传类型 允许…

通过增加缓存优化斐波那契递归的冗余计算

一、python 斐波那契数列的递归实现存在大量的冗余计算。例如,为了计算fib(n),我们需要计算fib(n-1)和fib(n-2),但是在计算fib(n-1)的过程中,我们又会重复计算fib(n-2)。当n的值很大时,这种冗余计算会消耗大量的计算资…

Ubuntu Desktop 删除文件

Ubuntu Desktop 删除文件 1. right mouse click on the file -> Move to Trash2. right mouse click on the file -> DeleteReferences 1. right mouse click on the file -> Move to Trash ​ 2. right mouse click on the file -> Delete ​​​ References …

带你了解软件系统架构的演变

随着信息技术的飞速发展,软件系统架构作为支撑软件系统的核心框架,也在不断地演变和进步。本文旨在带你了解软件系统架构的发展历程,从而更好地理解现代软件系统的构建和设计。 一、单体应用架构 单体应用架构是最早的软件系统架构形式&…

关于在分布式环境中RVN和使用场景的介绍3

简介 在《关于在分布式环境中RVN和使用场景的介绍2》和《关于在分布式环境中RVN和使用场景的介绍1》中我们介绍了RVN的概念和在一些具体用例中的使用。在本文中我们讨论一下在分布式环境中使用RVN需要注意的问题。 问题 我们在收到一条待处理的事件时,需要检查该…

架构(十三)动态本地锁

一、引言 加锁大家都知道,但是目前提供动态锁的基本都是分布式锁,根据订单或者某个收费款项进行加锁。比如这个1订单要收刷卡费用,那就OREDER_1做为key丢到redis进行分布式加锁。这也是当下分布式锁最流行的方式。 但是对于平台项目或者一些并…

【深度学习】基于多层感知机的手写数字识别

案例2:构建自己的多层感知机: MNIST手写数字识别 相关知识点: numpy科学计算包,如向量化操作,广播机制等 1 任务目标 1.1 数据集简介 ​ MNIST手写数字识别数据集是图像分类领域最常用的数据集之一,它包含60,000张训练图片&am…