本文为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 地址
-
本地 IP 地址是由网络路由器分配给不同设备的内部(Internal) IP 地址,这些 IP 地址可能是根据设备的连接顺序而改变的,只有内部网络的设备之间能相互看到,而外部网络无法看到,也无法通过这些 IP 地址访问内部网络。
-
当路由器和外部因特网服务供应商(Internet service provider,ISP)连接时,ISP 分配给路由器一个公共(Public)或外部(External)的 IP 地址,它在互联网上对其他人可见。任何信息首先通过公共或外部的 IP 地址寻路,然后再通过内网 IP 地址寻路。
-
假如另一位玩家“朋友”内部和外部 IP 地址都不同,在我们知道他 IP 地址的情况下,我们的设备每次都可以使用 IP 地址与他的设备进行连接,但这并不理想(Ideal),除非他先将他的 IP 地址告诉我们,并且我们很多时候都没有这样的“朋友”但又想玩多人游戏。
6.2 通过 Internet 连接
-
问题关键就是解决如何方便地“找到”别人的 IP 地址。
-
第一种办法将就是将设备连接到专用服务器上,该服务器具有其他已经登录的玩家 IP 地址的列表,通过这个列表再与玩家朋友的设备进行连接。但是设置专用服务器成本较高,并且当玩家越多时要求服务器的数量越多、存储空间越大、处理能力越强。
-
第二种办法就是使用监听服务器,即一名玩家的设备作为监听服务器,其他玩家的设备作为客户端加入,但问题依然存在,客户端仍然需要事先知道要加入哪个 IP 地址以进行连接。
-
因此必须要有一个中间阶段(In-between stage):您的游戏登录向某些服务器发送信号,该服务器将您连接到其他已经登陆到游戏中的玩家,他们通常会使用这些服务实现服务器托管。这些服务创建成本低、耗时少,并且通常有附加功能(Addtional features),例如安全性和好友系统。
服务器托管是指将您的服务器部署到一个第三方提供商的数据中心,以便您可以减少自己的IT成本,更加高效地管理计算资源,并获得更强大的网络安全保护。服务器托管提供了多种技术,可以帮助企业实现灵活性和可扩展性,并有助于改善基础架构的可用性,可靠性和管理成本。
——《什么是服务器托管》
-
制作一个系统用于在服务器上托管游戏以维护玩家的安全性、实现管理大量用户的规模扩展(Scale up to handle amounts of users),这需要的不仅仅是游戏编程这样的专业知识。如果还想要将游戏移植到流行的游戏平台如
Xbox Live
和PlayStation
就需要重写游戏系统,让它与这些平台的底层代码兼容(So it‘s compatible with their code base)。使用虚幻引擎的 在线子系统(Online Subsystem),就可以让我们在实现一份 代码库(Code base)的情况下,将游戏兼容到任意平台。在软件开发中,代码库(英语:code base或codebase)是用于构建特定软件系统、应用程序或软件组件一组的源代码。
通常,代码库仅包含人工编写的源代码文件;代码库通常不包含由工具生成的源代码文件或二进制文件(目标文件),因为它们可以从人工编写的源代码构建生成,没有必要加入代码库。但是,代码库通常包括配置文件和属性文件,因为这些文件是构建时所必不可少的数据。
—— 维基百科《代码库》
6.3 在线子系统
-
当我们使用虚幻引擎(在线子系统)制作一个多人游戏时,我们通常会连接到一个可以管理游戏会话(Manage game sessions)、连接来自世界各地的玩家的服务,该服务拥有处理连接的代码,这些服务包括
Steam
、Xbox Live
、PlayStation
等。 -
当多人游戏运行时,虚幻引擎允许我们只处理虚幻引擎中的代码,因为它将在后台处理用于各种平台的特定细节,这意味着用于 跨平台(Cross-platform)的特定代码被抽象掉了(Is abstracted away)。虚幻引擎旨在连接各种在线服务的网络抽象层(Networking abstract layer)称为 在线子系统(Online Subsystem)。
在线子系统(Online Subsystem) 及其接口提供一种可访问Steam、Xbox Live、Facebook等在线服务功能的常用方法。开发一款在多平台上发行或支持多在线服务的游戏时,在线子系统可确保开发者唯一需要做的变更就是对所有支持的服务进行配置调整。
—— 虚幻引擎官方文档《在线子系统》
-
本课程使用的服务为
Steam
,因为它是托管多人游戏会话最流行的服务之一,并且它无需申请开发人员许可、支付相关费用即可简单上手进行学习和使用(除非在Steam
上出售游戏)。 -
之后课程的目标就是创建一个系统,它能让我们启动游戏后简单按下一个按钮就可以自动地搜索任何在线并登录到我们游戏的玩家;我们还要将这个系统的代码放在一个紧凑的插件中,以便我们在以后新的多人游戏项目中都能使用这个插件。听起来不错?(Sound awesome)
6.4 Summary
本节课介绍了内部和外部 IP 的基本概念,以及玩家通过 Internet 连接到多人游戏中的两种方式,它们的缺点都是需要事先知道其他玩家的 IP 地址,因此需要可以管理游戏会话、连接来自世界各地的玩家的在线平台服务来解决这个问题,如 Steam
、Xbox Live
、PlayStation
等,它们创建成本低、耗时少,并且通常有安全性和好友系统等附加功能。虚幻引擎的在线子系统在后台处理和抽象掉用于跨平台的细节和特定代码。