Language:
Page Info
Skill Level:
Engine Version:
Share

Steam在线子系统

利用 Steam在线子系统API 可将虚幻引擎4应用程序发布到Valve的Steam平台上。 Steam 模块的主要作用是帮助开发者将拥有一套功能的应用程序(如配对和排行榜)面向Steam用户进行发布。 此外,Steam模块实现了多个被在线子系统 公开的接口,支持Steamworks软件开发套件(SDK)提供的多数内容。

部分可用的Steam接口有:

  • 配对(大厅和游戏服务器API)

  • 排行榜

  • 成就

  • 声音

  • 用户云

  • 共享云

  • 外部 UI

参阅Steam在线子系统API参考 ,了解当前可用Steam接口更完整的列表。

满足Valve的要求

可通过Valve Steamworks 对Steam子系统进行更多设置。 请联络Valve 并查阅其Steamworks SDK文档 ,在通过UE4使用Steam之前确保应用程序已满足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.csSteamworksCSFile.png
在此例中,[当前版本] 被格式化为 v139

编译UE4

如要从源编译UE4,则应采用以下步骤:

  1. 打开 OnlineSubsystemSteamPrivatePCH.h(位于 ..\..\Plugins\Online\OnlineSubsystemSteam\Source\Private\),其中有以下代码行,定义Steamworks SDK的根位置:

    #define STEAM_SDK_ROOT_PATH TEXT("Binaries/ThirdParty/Steamworks")
  2. 需要将此代码行改为:

    #define STEAM_SDK_VER TEXT("Steam[Current Version]")

设置Steamworks SDK

借助引擎预编译版本使用Steam时只要求将部分动态链接库(*.dll)从Valve的SDK复制到正确的文件夹中。 如果要针对源重新编译引擎,则也需要将SDK放入正确的路径。现在将相关的redistributable文件从SDK的 /redistributable_bin/ 目录放入以下路径:

选择操作系统

Windows

Mac OS

Linux

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

/YourUnrealEnginePath/EngineOrGameFolder/Binaries/Mac/YourGame.app/Contents/MacOS

  • libsteam_api.dylib(来自 /redistributable_bin/osx32 - 动态库 (*.dylib) 拥有32和64位支持)

Linux用户必须关联以下文件并随可执行文件进行发布。

  • libsteam_api.so

Steam应用程序ID

使用Steam在线子系统的所有游戏都必须拥有一个有效的应用程序ID,因为如果Steamworks API不了解应用程序的Steam应用程序ID,其便不会初始化。 在初始化Steam之前,UE4将生成 steam_appid.txt(正常关闭时UE4将删除此文件)。 需要注意的是 steam_appid.txt 必须放置在应用程序可执行文件的同一个目录下,因为Steam将在当前的工作目录下查找文本文件。 此外,文件不应被包含在Steam图片中。

打开 steam_appid.txt 后将看到一个 SteamDevAppId 条目,这个域将向Steam提示应用程序的ID。 因此无需使用Steam客户端即可运行游戏(但客户端必须在运行中)。

如果希望测试应用程序,可使用 480SteamDevAppId,这是所有开发者之间共享的一个测试应用程序ID。 虽然可用上述测试应用程序ID对大多数Steam接口进行测试,但应用程序仍然需要一个Steam应用程序ID才能进行发布。

发布版本

在发布版本中,引擎将进行检查,确保已登入的用户正常注册到游戏,如引擎测试返回false则关闭(这是一种保护游戏的方式)。此外,使用Steam DRM(参见Steamworks SDK)可以进一步防止游戏遭到篡改。

配置应用程序的设置

如使用 虚幻项目浏览器 新建项目,在线子系统 设置不应存在于 DefaultEngine.ini 中;但如果修改的是一个范例项目,在线子系统 设置则可能已存在。

设置应用程序的Steamworks SDK后(并设置Steam应用程序ID),即可配置应用程序的设置来使用Steam在线子系统。

步骤

  1. 首先打开应用程序的 DefaultEngine.ini 文件。

  2. 添加以下设置:

    [/Script/Engine.GameEngine]
    +NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="OnlineSubsystemUtils.IpNetDriver")

    NetDriverDefinitions 将描述UE4可用的网络驱动,并定义以下属性:

    • DefName 是此网络驱动定义的独特命名。

    • DriverClassName 是主网络驱动的类命名。

    • DriverClassNameFallBack 是主网络驱动类初始化失败后启用的后备网络驱动的类命名。

  3. 添加以下设置即可告知UE4使用Steam在线子系统:

    [OnlineSubsystem]
    DefaultPlatformService=Steam
  4. 告知UE4希望应用程序使用Steam在线子系统后,需要添加以下设置来配置 OnlineSubsystemSteam 模块:

    [OnlineSubsystemSteam]
    bEnabled=true
    SteamDevAppId=480
  5. 最后需要将Steam类指定到应用程序连接的网络驱动:

    [/Script/OnlineSubsystemSteam.SteamNetDriver]
    NetConnectionClassName="OnlineSubsystemSteam.SteamNetConnection"

最终结果

按照此指南进行操作后,您应用程序的 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模块纳入为项目的一个部分(如需了解额外帮助,请参阅虚幻引擎编译系统的目标文件 )。 具体而言,将以下代码行添加到 mygame.build.cs 的构造函数中即可确保Steam模块随游戏而编译。

DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");

Mac上的Steam覆层

需要用Steam客户端启动游戏才能在Mac上使用Steam覆层。对此,首先要使用Steam游戏菜单中的“添加非Steam游戏到我的库中”选项,将游戏添加到库中。