《UE5_C++多人TPS完整教程》学习笔记5 ——《P6 在线子系统(Online Subsystem)》


本文为B站系列教学视频 《UE5_C++多人TPS完整教程》 —— 《P6 在线子系统(Online Subsystem)》 的学习笔记,该系列教学视频为 Udemy 课程 《Unreal Engine 5 C++ Multiplayer Shooter》 的中文字幕翻译版,UP主(也是译者)为 游戏引擎能吃么。


文章目录

  • P6 在线子系统
  • 6.1 IP 地址
  • 6.2 通过 Internet 连接
  • 6.3 在线子系统
  • 6.4 Summary


P6 在线子系统

本节课将介绍 IP 地址的基本概念,并对如何利用 IP 地址 进行互联网连接,最后讲解虚幻引擎的在线子系统(Online Subsystem)以及它如何提供抽象层(Abstract layer)使得同一份连接代码代码实现跨平台(Cross-platform)多人联网。
在这里插入图片描述


6.1 IP 地址

  1. 本地 IP 地址是由网络路由器分配给不同设备的内部(Internal) IP 地址,这些 IP 地址可能是根据设备的连接顺序而改变的,只有内部网络的设备之间能相互看到,而外部网络无法看到,也无法通过这些 IP 地址访问内部网络。

  2. 当路由器和外部因特网服务供应商Internet service provider,ISP)连接时,ISP 分配给路由器一个公共(Public)或外部(External)的 IP 地址,它在互联网上对其他人可见。任何信息首先通过公共或外部的 IP 地址寻路,然后再通过内网 IP 地址寻路。
    在这里插入图片描述

  3. 假如另一位玩家“朋友”内部和外部 IP 地址都不同,在我们知道他 IP 地址的情况下,我们的设备每次都可以使用 IP 地址与他的设备进行连接,但这并不理想(Ideal),除非他先将他的 IP 地址告诉我们,并且我们很多时候都没有这样的“朋友”但又想玩多人游戏。
    在这里插入图片描述


6.2 通过 Internet 连接

  1. 问题关键就是解决如何方便地“找到”别人的 IP 地址。
    在这里插入图片描述

  2. 第一种办法将就是将设备连接到专用服务器上,该服务器具有其他已经登录的玩家 IP 地址的列表,通过这个列表再与玩家朋友的设备进行连接。但是设置专用服务器成本较高,并且当玩家越多时要求服务器的数量越多、存储空间越大、处理能力越强。
    在这里插入图片描述
    在这里插入图片描述

  3. 第二种办法就是使用监听服务器,即一名玩家的设备作为监听服务器,其他玩家的设备作为客户端加入,但问题依然存在,客户端仍然需要事先知道要加入哪个 IP 地址以进行连接。
    在这里插入图片描述

  4. 因此必须要有一个中间阶段(In-between stage):您的游戏登录向某些服务器发送信号,该服务器将您连接到其他已经登陆到游戏中的玩家,他们通常会使用这些服务实现服务器托管。这些服务创建成本低、耗时少,并且通常有附加功能(Addtional features),例如安全性和好友系统。

    服务器托管是指将您的服务器部署到一个第三方提供商的数据中心,以便您可以减少自己的IT成本,更加高效地管理计算资源,并获得更强大的网络安全保护。服务器托管提供了多种技术,可以帮助企业实现灵活性和可扩展性,并有助于改善基础架构的可用性,可靠性和管理成本。


    ——《什么是服务器托管》

    在这里插入图片描述

  5. 制作一个系统用于在服务器上托管游戏以维护玩家的安全性、实现管理大量用户的规模扩展(Scale up to handle amounts of users),这需要的不仅仅是游戏编程这样的专业知识。如果还想要将游戏移植到流行的游戏平台如 Xbox LivePlayStation 就需要重写游戏系统,让它与这些平台的底层代码兼容(So it‘s compatible with their code base)。使用虚幻引擎的 在线子系统Online Subsystem),就可以让我们在实现一份 代码库Code base)的情况下,将游戏兼容到任意平台。

    在软件开发中,代码库(英语:code base或codebase)是用于构建特定软件系统、应用程序或软件组件一组的源代码。
    通常,代码库仅包含人工编写的源代码文件;代码库通常不包含由工具生成的源代码文件或二进制文件(目标文件),因为它们可以从人工编写的源代码构建生成,没有必要加入代码库。但是,代码库通常包括配置文件和属性文件,因为这些文件是构建时所必不可少的数据。


    —— 维基百科《代码库》

6.3 在线子系统

  1. 当我们使用虚幻引擎(在线子系统)制作一个多人游戏时,我们通常会连接到一个可以管理游戏会话(Manage game sessions)、连接来自世界各地的玩家的服务,该服务拥有处理连接的代码,这些服务包括 SteamXbox LivePlayStation 等。

  2. 当多人游戏运行时,虚幻引擎允许我们只处理虚幻引擎中的代码,因为它将在后台处理用于各种平台的特定细节,这意味着用于 跨平台Cross-platform)的特定代码被抽象掉了(Is abstracted away)。虚幻引擎旨在连接各种在线服务的网络抽象层(Networking abstract layer)称为 在线子系统Online Subsystem)。
    在这里插入图片描述

    在线子系统(Online Subsystem) 及其接口提供一种可访问Steam、Xbox Live、Facebook等在线服务功能的常用方法。开发一款在多平台上发行或支持多在线服务的游戏时,在线子系统可确保开发者唯一需要做的变更就是对所有支持的服务进行配置调整。


    —— 虚幻引擎官方文档《在线子系统》

  3. 本课程使用的服务为 Steam,因为它是托管多人游戏会话最流行的服务之一,并且它无需申请开发人员许可、支付相关费用即可简单上手进行学习和使用(除非在 Steam 上出售游戏)。

  4. 之后课程的目标就是创建一个系统,它能让我们启动游戏后简单按下一个按钮就可以自动地搜索任何在线并登录到我们游戏的玩家;我们还要将这个系统的代码放在一个紧凑的插件中,以便我们在以后新的多人游戏项目中都能使用这个插件。听起来不错?(Sound awesome)
    在这里插入图片描述


6.4 Summary

本节课介绍了内部和外部 IP 的基本概念,以及玩家通过 Internet 连接到多人游戏中的两种方式,它们的缺点都是需要事先知道其他玩家的 IP 地址,因此需要可以管理游戏会话、连接来自世界各地的玩家的在线平台服务来解决这个问题,如 SteamXbox LivePlayStation 等,它们创建成本低、耗时少,并且通常有安全性和好友系统等附加功能。虚幻引擎的在线子系统在后台处理和抽象掉用于跨平台的细节和特定代码。
在这里插入图片描述


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

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

相关文章

LeetCode周赛384 题解

AK 第 384 场周赛 - 力扣(LeetCode) 前两题都是签到, 略。 第三题: 回文字符串的最大数量 1、题意: 给定一个字符串数组,总字符数量不超过1e6, 可以交换其中的任意两个字符,问能构造最多几个回文字符串。 2、题解: 首先我…

Java图形化界面编程—— ImageIO 笔记

2.8.4 ImageIO的使用 在实际生活中,很多软件都支持打开本地磁盘已经存在的图片,然后进行编辑,编辑完毕后,再重新保存到本地磁盘。如果使用AWT要完成这样的功能,那么需要使用到ImageIO这个类,可以操作本地磁…

二、ClickHouse简介

ClickHouse简介 前言一、行式存储二、DBMS功能三、多样化引擎四、高吞吐写入能力五、数据分区与线程级并行六、场景七、特定版本 前言 ClickHouse 是俄罗斯的 Yandex 于 2016 年开源的列式存储数据库(DBMS),使用 C 语言编写,主要…

Ubuntu Desktop - Terminal 输出全部选中 + 复制

Ubuntu Desktop - Terminal 输出全部选中 复制 1. Terminal2. Terminal 最大化3. Edit -> Select All4. Copy & PasteReferences 1. Terminal 2. Terminal 最大化 3. Edit -> Select All 4. Copy & Paste Edit -> Copy or Shift Ctrl C Edit -> Paste…

数据库管理-第150期 Oracle Vector DB AI-02(20240212)

数据库管理150期 2024-02-12 数据库管理-第150期 Oracle Vector DB & AI-02(20240212)1 LLM2 LLM面临的挑战3 RAG4 向量数据库LLM总结 数据库管理-第150期 Oracle Vector DB & AI-02(20240212) 作者:胖头鱼的鱼…

SHA-512在Go中的实战应用: 性能优化和安全最佳实践

SHA-512在Go中的实战应用: 性能优化和安全最佳实践 简介深入理解SHA-512算法SHA-512的工作原理安全性分析SHA-512与SHA-256的比较结论 实际案例分析数据完整性验证用户密码存储数字签名总结 性能优化技巧1. 利用并发处理2. 避免不必要的内存分配3. 适当的数据块大小总结 与其他…

通过QT制作一个模仿微信主界面的界面(不要求实现具体通信功能)

main.cpp #include "widget.h" #include "second.h"#include <QApplication>int main(int argc, char *argv[]) {QApplication a(argc, argv);Widget w;w.show();//实例化第二个界面Second s;QObject::connect(&w, &Widget::my_jump, &…

Python绘制折线图、散点图...Pyplot库功能使用示例大全

matplotlib.pyplot库功能使用示例&#xff0c;Python绘制折线图、散点图... 1、简单折线图示例2、设置中文字符&#xff0c;解决乱码问题3、添加标记格式4、添加y值标记5、添加图例6、设置字体大小7、设置坐标轴起点数值8、绘制多条折线9、散点图基础示例 matplotlib.pyplot库是…

Acwing---839. 模拟堆

模拟堆 1.题目2.基本思想3.代码实现 1.题目 维护一个集合&#xff0c;初始时集合为空&#xff0c;支持如下几种操作&#xff1a; I x&#xff0c;插入一个数 x&#xff1b;PM&#xff0c;输出当前集合中的最小值&#xff1b;DM&#xff0c;删除当前集合中的最小值&#xff08…

[2-远程开发-01]idea远程连接开发

背景 因为本次的项目使用到一些网络相关的库只在linux可使用&#xff0c;项目本身也会在linux运行&#xff0c;而且如果在mac上进行开发的话&#xff0c;也涉及到部署的问题&#xff0c;而且也不能调试。 所以直接在本专栏第一篇的centos主机上进行开发&#xff0c;以远程连接…

【数据结构】14 队列(带头结点的链式存储和顺序存储实现)

定义 队列是一个有序线性表&#xff0c;但是队列的插入、删除操作是分别在线性表的两个不同端点进行的。 设一个队列 Q ( a 1 , a 2 , . . . , a n ) Q (a_1, a_2,...,a_n) Q(a1​,a2​,...,an​)&#xff0c;那么 a 1 a_1 a1​被称为队头元素&#xff0c; a n a_n an​为队…

视觉开发板—K210自学笔记(五)

本期我们来遵循其他单片机的学习路线开始去用板子上的按键控制点亮LED。那么第一步还是先知道K210里面的硬件电路是怎么连接的&#xff0c;需要查看第二节的文档&#xff0c;看看开发板原理图到底是按键是跟哪个IO连在一起。然后再建立输入按键和GPIO的映射就可以开始变成了。 …