UE 接入 SteamSDK 及相关资料

游戏上架 Steam 必须要接入 SteamSDK,本篇文章简单介绍一下在 UE4 中接入SteamSDK 的方法,后续与接入 Steam 平台服务相关的内容也会放到这篇文章中。

SteamSDK 的接入可以使游戏与 Steam 的社区整合,Steam 拥有很好的社区生态,这一点是 Epic 刚出的 Epic Games Store 目前比不了的~(当然我是支持市场竞争的。

废话不多说,首先,检查引擎目录下:

1
Engine\Binaries\ThirdParty\Steamworks\Steamv139

该目录下是否有 Win32/Win64 文件夹,以及其中是否具有以下几个文件:

1
steam_api.dll  steamclient.dll  tier0_s.dll  vstdlib_s.dll

如果没有可以从 Steam 的安装目录拷贝过来。

之后打开项目,打开Plugins - Online Platfrom,确保启用以下三个插件:

  • Online Subsystem NULL
  • Online Subsystem Steam
  • Online Subsystem Utils

打开项目的 *.target.cs 文件,加入bUsesSteam = true;:

1
2
3
4
5
6
7
8
9
10
11
12
using UnrealBuildTool;
using System.Collections.Generic;

public class SanguoWarriorsTarget : TargetRules
{
public SanguoWarriorsTarget(TargetInfo Target) : base(Target)
{
Type = TargetType.Game;
bUsesSteam = true;
ExtraModuleNames.AddRange(new string[] { "SanguoWarriors" } );
}
}

打开项目的*.build.cs,额外添加 OnlineSubsystem 的模块依赖:

1
2
3
4
5
6
7
8
9
10
11
PublicDependencyModuleNames.AddRange(
new string[] {
"OnlineSubsystem",
"OnlineSubsystemUtils",
});

PrivateDependencyModuleNames.AddRange(
new string[] {
"OnlineSubsystem",
"OnlineSubsystemUtils"
});

打开项目目录下的 Config/DefaultEngine.ini,加入(或编辑) 以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
[/Script/Engine.Engine]
!NetDriverDefinitions=ClearArray
+NetDriverDefinitions=(DefName="GameNetDriver",DriverClassName="/Script/OnlineSubsystemSteam.SteamNetDriver",DriverClassNameFallback="/Script/OnlineSubsystemUtils.IpNetDriver")

[OnlineSubsystem]
DefaultPlatformService=Steam
PollingIntervalInMs=20

[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=480
GameServerQueryPort=27015
bRelaunchInSteam=false

注意修改 SteamDevAppId 项为你自己的 Steam 内容的 AppID.
上面的操作完毕之后,打开 Steam(必须启动 Steam 才可以在游戏中使用 Shift+Tab) 唤出 Steam 的界面。

然后可以使用 Standalone 模式运行游戏,进入游戏后按下 Shift+Tab 如果可以唤出 Steam,即为成功。

如果日志中出现这样的警告:

1
2
3
4
5
6
7
8
9
10
11
12
[2019.03.18-06.02.22:971][186]LogOnline: Warning: STEAM: Steamworks: SteamUtils() failed!
[2019.03.18-06.02.22:971][186]LogOnline: Warning: STEAM: Steamworks: SteamUser() failed!
[2019.03.18-06.02.22:972][186]LogOnline: Warning: STEAM: Steamworks: SteamFriends() failed!
[2019.03.18-06.02.22:972][186]LogOnline: Warning: STEAM: Steamworks: SteamRemoteStorage() failed!
[2019.03.18-06.02.22:973][186]LogOnline: Warning: STEAM: Steamworks: SteamUserStats() failed!
[2019.03.18-06.02.22:973][186]LogOnline: Warning: STEAM: Steamworks: SteamMatchmakingServers() failed!
[2019.03.18-06.02.22:973][186]LogOnline: Warning: STEAM: Steamworks: SteamApps() failed!
[2019.03.18-06.02.22:973][186]LogOnline: Warning: STEAM: Steamworks: SteamNetworking() failed!
[2019.03.18-06.02.22:974][186]LogOnline: Warning: STEAM: Steamworks: SteamMatchmaking() failed!
[2019.03.18-06.02.22:974][186]LogOnline: Display: STEAM: OnlineSubsystemSteam::Shutdown()
[2019.03.18-06.02.22:975][186]LogOnline: Warning: STEAM: Steam API failed to initialize!
[2019.03.18-06.02.22:975][186]LogOnline: Display: STEAM: OnlineSubsystemSteam::Shutdown()

这是因为启动游戏时,没有打开 Steam,先启动 Steam 再启动游戏即可。

打包需要注意的事情:
使用 Shipping 模式打包,打包完成后在打包输出的 $ProjectName\Binaries\Win64 下新建文件 steam_appid.txt,将你的 AppID 填入其中即可(如 480(Steam 的测试 AppID))。

外部资料