Choose your operating system:
Windows
macOS
Linux
Contributors:Valve
Online Subsystem Steam API 使您可以将虚幻引擎4(UE4)应用程序发布到Valve的Steam平台。 Steam 模块的主要目的是帮助您通过一组功能(如媒介和通栏广告)将应用程序分发给Steam用户。 此外,Steam模块实现多个由Online Subsystem公开的接口,支持Steamworks Software Development Kit(SDK)提供的大多数功能。
部分可用的Steam接口包括:
Matchmaking(Lobbies和GameServer API)
Leaderboards
Achievements
Voice
UserCloud
SharedCloud
External UI
请参考Online Subsystem Steam API参考以了解当前可用的Steam接口的更完整列表。
满足Valve的要求
Steam Subsystem需要通过Valve Steamworks进行额外设置。 请联系Valve并参考Steamworks SDK文档以确保您的应用程序满足Valve的要求,然后再尝试将Steam与UE4一起使用。
下载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,应采取以下步骤:
打开"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复制到相应的文件夹。如果您想要根据源代码重新编译引擎,还需要将SDK放在合适的位置。现在,将相关的可重新分发文件从SDK istributable_bin/
目录复制到以下位置:
Steam应用ID
所有使用Steam Online Subsystem的游戏都必须有有效的应用程序ID,因为如果Steamworks API不知道您应用程序的Steam应用ID,就无法初始化。
在初始化Steam之前,UE4将生成`steam_appid.txt(在正常关闭引擎时,UE4会删除这个文件)。
需要注意的是,
steam_appid.txt`必须位于应用程序可执行文件所在的目录,因为Steam将在当前工作目录寻找这个文本文件。
此外,该文件不应包含在任何Steam映像中。
如果您打开`steam_appid.txt`,将会看到 **SteamDevAppId** 条目,这个字段向Steam暗示应用程序ID。 这样就无需使用Steam客户端(尽管它必须运行)启动游戏。
如果想要测试应用程序,可以使用 SteamDevAppId 480
,这是所有开发者共享的测试应用ID。
虽然您可以使用之前提到的测试应用ID来测试大都数Steam接口,但应用程序需要有Steam应用ID才能发布。
发布构建版
在发布构建版时,引擎会检查以确保登录用户正确订阅了游戏,如果引擎测试返回false,则会关闭(这是帮助保护游戏的一种方式)。 此外,使用Steam DRM(请参阅Steamworks SDK)应进一步保护游戏不被篡改。
配置应用程序设置
如果您使用 虚幻项目浏览器 创建新项目,那么`DefaultEngine.ini`中应该没有 Online Subsystem 设置;但如果您要修改我们的某个样本项目,则 Online Subsystem 设置可能已经存在。
现在,您已经为应用程序设置了Steamworks SDK(同时设置Steam应用ID),便已准备好了配置应用程序设置以使用Online Subsystem Steam。
步骤
打开项目的`DefaultEngine.ini`文件,并添加以下设置:
[/Script/Engine.GameEngine] +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")
NetDriverDefinitions 描述了可供UE4使用的网络驱动器,并添加了以下属性:
DefName 是该网络驱动器定义的唯一名称。
DriverClassName 是主网络驱动器的类名称。
DriverClassNameFallBack 是退却网络驱动器的类名(如果主网络驱动器类初始化失败)。
为了告诉UE4使用Online Subsystem Steam,添加以下设置:
[OnlineSubsystem] DefaultPlatformService=Steam
现在,您已经告诉UE4,您希望应用程序使用Steam Online Subsystem,接下来需要添加以下设置来配置 OnlineSubsystemSteam 模块:
[OnlineSubsystemSteam] bEnabled=true SteamDevAppId=480
最后,需要为应用程序连接在网络驱动器中指定Steam类:
[/Script/OnlineSubsystemSteam.SteamNetDriver] NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"
最终结果
在本简短指南结束后,您的应用程序`DefaultEngine.ini`文件应类似于以下设置块。如果你想查看其他项目是如何设置的并使用Online Subsystem,请参考我们的样本项目库。
完成的设置
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的功能、实现或开发者界面的更多相关信息,请参阅Steam网站上的合作伙伴文档。
大厅细节
大厅实质上是Steam的后端服务上的聊天室,作为点对点实例存在。与服务器不同,在加入前无法获得如ping时或当前其他用户数等大厅相关信息。其通常用于聆听服务器。要设置大厅,将 bUsesPresence
标志设为 true
。
服务器细节
要设置服务器实例,将 bUsesPresence
标为 false
。专用服务器需要以下三种宏,均须与合作伙伴面板(位于Steam专用服务器工具页面)上的值匹配。如此类值不匹配,Steam网络将不显示专用服务器:
UE4宏 |
Steam命名 |
说明 |
---|---|---|
|
|
Valve建议将此设为版本ID,通常使用AppID(字符串形式)或无额外符号的简略产品名。 更改此字段(如更新版本ID)将导致Steam在匹配时忽略使用旧命名的所有活跃服务器,且需在合作伙伴后端修改工具信息。 |
|
|
此通常为游戏的文件夹命名,且无可包含空格或符号。若该命名未包含空格或符号,则无需将其设为文件夹命名。 |
|
|
Valve建议将此宏设为产品全名。 |
|
N/A |
要以UE4 4.22和以上版本,在在Steam以外启动,此宏须包含产品的Steam ID。 |
在UE4 4.22版中,可在游戏的 Target.cs
文件中指定此类值。同时还可通过定义 UE4_PROJECT_STEAMSHIPPINGID
,将Steam ID写入版本。所有版本配置均需进行此操作,否则将无法在Steam外启动。
对于4.22之前的版本,编辑 OnlineSessionAsyncServerSteam.cpp
,以便其包含游戏的值。
欲了解分发专用服务器版本的相关信息,参阅Steam的合作伙伴文档。
Steam在线验证
Steam使用一种特殊的验证系统,用于控制对平台提供的部分独特服务器相关功能的访问,如广告服务器和玩家计数、检索禁令列表和做出反应(发行商和Valve反作弊禁令)和执行许可证检查。 虚幻引擎4允许通过`FOnlineAuthSteam`类与这个功能连接。 应用程序设置为使用Steam Online Subsystem后,就可以启用 SteamAuth 包处理程序组件来利用这些功能。
启用SteamAuth
要启用SteamAuth,并将以下内容添加到"DefaultEngine.ini"或者针对每一个打算支持Steam在线验证的平台,添加到特定于平台的引擎.ini文件(如"WindowsEngine.ini"、"LinuxEngine.ini"或"MacEngine.ini"):
[PacketHandlerComponents]
+Components=OnlineSubsystemSteam.SteamAuthComponentModuleInterface
启用后,就可以使用Steam Online Subsystem接口(SteamOSS)功能`GetAuthInterface`来访问SteamAuth功能。
启用SteamAuth将会使应用程序对所有加入的玩家运行验证程序(针对Steam服务)。默认情况下,SteamAuth将没有通过这项检查的玩家踢出游戏,但这个行为可以被覆盖。
SteamAuth委托
SteamAuth系统中有两个开发者可能希望覆盖的委托:OverrideFailureDelegate`和`OnAuthenticationResultDelegate
。
当玩家尝试加入服务器而没有通过Steam验证时,或者玩家在会话期间失去了Steam验证,通过玩家的`FUniqueNetId`调用`OverrideFailureDelegate`。 默认情况下,SteamAuth会将玩家踢出游戏。 但是,如果该委托受到约束,则默认行为将被暂停,因此开发者必须在仍需要这个行为时手动将玩家踢出。
`OnAuthenticationResultDelegate`处理来自Steam验证服务的响应,提供玩家的`FUniqueNetId`和一个指示验证尝试是否成功的布尔值。
附加提示
使用IPNetDriver
UE4的Steam OSS默认将Steam网络用作默认套接字子系统。在4.22版中,可通过将 OnlineSubsystemSteam.bUseSteamNetworking
设为 false
禁用此行为。要进行此操作,请将以下代码添加到"DefaultEngine.ini",或者各支持平台的平台特定引擎.ini文件(如"WindowsEngine.ini"、"LinuxEngine.ini"或"MacEngine.ini"):
[OnlineSubsystemSteam]
bUseSteamNetworking=false
在4.22之前的版本中,修改调用 RegisterSocketSubsystem
函数的 SocketSubsystemSteam.cpp
,将 布尔
参数改为 false
。同时还需在项目配置文件中修改网络驱动。
模块设置
确保将虚幻引擎Steam模块作为项目的一部分包含进去(请参阅UnrealBuildTool目标哦文件以获取更多帮助)。 具体而言,在`mygame.build.cs`的构造函数中添加以下行应足以确保随着游戏构建Steam模块。
DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");
Steam Overlay on Mac
Steam Overlay on Mac要求通过Steam客户端启动游戏。为此,需要先使用Steam"游戏"菜单中的"将非Steam游戏添加到我的库"选项来将游戏添加到库。