|
在线子系统Steam
通过Online Subsystem Steam API,您可以将虚幻引擎4(UE4)应用程序发送到Valve的Steam平台。 Steam模块的主要目的是帮助您向Steam用户分发具有一系列功能(例如配对和排行榜)的应用程序。此外,Steam模块实现了在线子系统公开的几个接口,支持Steamworks软件开发工具包(SDK)提供的大部分功能。
一些可用的Steam接口包括:
配对(Lobbies和GameServer API)
排行榜
成就
语音
UserCloud
SharedCloud
外部UI
请参考我们的在线子系统Steam API参考,以获取当前可用的Steam接口的更完整列表。
满足Valve的要求
Steam子系统需要通过Valve Steamworks进行额外设置。在与UE4一起使用Steam之前,请联系Valve并参考他们的Steamworks SDK文档,以确保您的应用程序符合Valve的要求。
下载Steamworks
如果您的应用程序符合Valve的要求,请继续下载最新版本的Steamworks SDK。 SDK需要解压缩并复制到/ YourUnrealEnginePath / Engine / Source / ThirdParty / Steamworks / Steam [当前版本] / sdk
如果您要更新项目的Steamworks SDK,请确保更新项目的Steamworks路径中的[当前版本]:
/ YourUnrealEnginePath / Engine / Source / ThirdParty / Steamworks / Steam [当前版本] / sdk
您还需要更新位于项目目录中的Steamworks.build.cs。
在此示例中,[当前版本]的格式为v139。
编译UE4
如果您从源代码编译虚幻引擎4,则应采取以下步骤:
1 打开“OnlineSubsystemSteamPrivatePCH.h”(位于“.. \ .. \ Plugins \ Online \ OnlineSubsystemSteam \ Source \ Private \”),您可以在其中找到以下代码行,定义Steamworks SDK的根位置:
- #define STEAM_SDK_ROOT_PATH TEXT("Binaries/ThirdParty/Steamworks")
复制代码
您需要修改要阅读的行:
- #define STEAM_SDK_VER TEXT("Steam[Current Version]")
复制代码
设置Steamworks SDK
对引擎的预编译版本使用Steam应该只需要将Valve的SDK中的一些动态链接库(* .dll)复制到相应的文件夹中。 如果您打算针对源重新编译引擎,则还需要将SDK放在正确的位置。 现在,将相关的可再发行文件从SDK的/ redistributable_bin /目录复制到以下位置:
您可以在Steam客户端目录中找到一些64位库(在撰写本文时,Valve未包含SDK中的所有库)。
/ YourUnrealEnginePath / Engine / Binaries / ThirdParty / Steamworks / Steam [当前版本] / Win64
steam_api64.dll
steamclient64.dll
tier0_s64.dll
vstdlib_s64.dll
/ YourUnrealEnginePath / Engine / Binaries / ThirdParty / Steamworks / Steam [当前版本] / Win32
steam_api.dll
steamclient.dll
tier0_s.dll
vstdlib_s.dll
Steam App ID
所有使用Steam在线子系统的游戏都必须具有有效的应用程序ID,因为如果Steamworks API不知道您的应用程序的Steam App ID,则不会初始化。在初始化Steam之前,UE4将生成steam_appid.txt(在正常关闭引擎期间,UE4将删除此文件)。请务必注意,steam_appid.txt必须与应用程序的可执行文件位于同一目录中,因为Steam将在当前工作目录中查找文本文件。此外,该文件不应包含在任何Steam图像中。
如果您打开steam_appid.txt,您将看到一个SteamDevAppId条目,该条目将您的应用程序的ID提示为Steam。这使得不必使用Steam客户端启动游戏(尽管它必须运行)。
如果要测试应用程序,可以使用480的SteamDevAppId,这是所有开发人员共享的测试应用程序ID。 虽然您可以使用上述测试应用程序ID测试大多数Steam接口,但您的应用程序在发布之前需要一个Steam App ID。
打包构建
在打包版本中,引擎将检查以确保登录用户正确订阅游戏,并且如果引擎的测试返回false则将关闭(这是帮助确保游戏安全的一种方法)。 此外,使用Steam DRM(请参阅Steamworks SDK)可以进一步防止游戏被篡改。
配置应用程序的设置
如果您使用虚幻项目浏览器创建新项目,则DefaultEngine.ini中不应存在联机子系统设置;
但是,如果您要修改我们的一个示例项目,则可能已存在联机子系统设置。
现在您已经为您的应用程序设置了Steamworks SDK(以及设置Steam App ID),您已准备好配置应用程序的设置以使用Online Subsystem Steam。
步骤
1 打开项目的DefaultEngine.ini文件并添加以下设置:
- [/Script/Engine.GameEngine]
- +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
复制代码
NetDriverDefinitions描述了UE4可用的网络驱动程序,其中定义了以下属性:
DefName是此网络驱动程序定义的唯一名称。
DriverClassName是主网络驱动程序的类名。
如果主网络驱动程序类无法初始化,则DriverClassNameFallBack是回退网络驱动程序的类名。
2要告知UE4使用Online Subsystem Steam,请添加以下设置:
- [OnlineSubsystem]
- DefaultPlatformService=Steam
复制代码
3现在您已告知UE4您希望应用程序使用Steam在线子系统,您需要通过添加以下设置来配置OnlineSubsystemSteam模块:
- [OnlineSubsystemSteam]
- bEnabled=true
- SteamDevAppId=480
复制代码
4最后,您需要为应用程序连接的Net Driver指定Steam类:
最终结果
在本简要指南的最后,您的应用程序的DefaultEngine.ini文件应如下所示。 如果您想了解其他项目如何设置和使用在线子系统,请参阅我们的示例项目库。
完成设置
DefaultEngine.ini
- [/Script/Engine.GameEngine]
- +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
- [OnlineSubsystem]
- DefaultPlatformService=Steam
- [OnlineSubsystemSteam]
- bEnabled=true
- SteamDevAppId=480
- [/Script/OnlineSubsystemSteam.SteamNetDriver]
- NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
复制代码
Steam在线验证
Steam具有一个特殊的身份验证系统,可以控制对平台提供的一些独特的服务器相关功能的访问,例如广告服务器和播放器计数,检索和响应禁止列表(发布者和Valve Anti-Cheat禁令)以及执行许可证检查。 虚幻引擎4提供了通过FOnlineAuthSteam类与此功能进行交互的功能。 一旦您的应用程序设置为使用Steam在线子系统,就可以通过启用SteamAuth数据包处理程序组件来利用这些功能。
启用SteamAuth
要启用SteamAuth,请将以下内容添加到“DefaultEngine.ini”,或添加到特定于平台的引擎.ini文件(例如“WindowsEngine.ini”,“LinuxEngine.ini”或“MacEngine.ini”)中。 旨在支持Steam在线身份验证:
- [PacketHandlerComponents]
- +Components=OnlineSubsystemSteam.SteamAuthComponentModuleInterface
复制代码
启用后,Steam在线子系统接口(SteamOSS)功能GetAuthInterface可用于访问SteamAuth功能。
启用SteamAuth将导致应用程序为所有加入的玩家运行身份验证过程(针对Steam服务)。默认情况下,SteamAuth会踢掉未通过此检查的玩家,但可以覆盖此行为。
SteamAuth代表
SteamAuth系统中有两个代理,开发人员可能希望覆盖它们:OverrideFailureDelegate和OnAuthenticationResultDelegate。
当玩家尝试在没有Steam身份验证的情况下加入服务器,或者当该玩家在会话期间丢失Steam身份验证时,OverrideFailureDelegate调用玩家的FUniqueNetId。默认情况下,SteamAuth会从游戏中踢出玩家。但是,如果绑定了此委托,则默认行为将被暂停,因此如果仍需要该行为,开发人员将不得不手动踢掉。
OnAuthenticationResultDelegate处理来自Steam的身份验证服务的响应,提供播放器的FUniqueNetId和指示身份验证尝试是否成功的布尔值。
补充说明
模块设置
确保将虚幻引擎Steam模块包含在项目中(有关其他帮助,请参阅UnrealBuildTool目标文件)。具体来说,在mygame.build.cs的construtor中添加以下行应该足以确保Steam模块与游戏一起构建。
- DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");
复制代码
|
|