Online Subsystem Steam

Valve 社の Steam プラットフォーム向けに配布するプロジェクトをセットアップする方法を含む、Online Subsystem Steam の概要です。

Windows
MacOS
Linux

貢献者:Valve 社

Online Subsystem Steam API を使って Unreal Engine 4 (UE4) アプリケーションを Valve の Steam プラットフォーム へシップすることができます。 Steam モジュールの主な目的は、様々な機能 (マッチメイクやリーダーボードなど) を備えたアプリケーションを Steam ユーザーへ配信することです。 さらに Steam モジュールには Online Subsystem で公開されるインターフェースが幾つか実装して Steamworks Software Development Kit (SDK) が提供しているほとんどの機能に対応しています。

利用可能な Steam インターフェースの一部を紹介します。

  • マッチメイク (Lobbies および GameServer APIs)

  • リーダーボード

  • アチーブメント

  • ボイス

  • UserCloud

  • SharedCloud

  • 外部 UI

現在利用できる Steam インターフェースの一覧は、Online Subsystem Steam API Reference を参照してください。

Valve の要件

Steam Subsystem は、Valve Steamworks を使った追加のセットアップが必要です。 Valve へ連絡し Steamworks SDK Documentation を参照して、UE4 で Steam を使う前にお持ちのアプリケーションが Valve の要件を満たしているか確認してください。

Steamworks をダウンロードする

アプリケーションが Valve の要件を満たしていることが確認できたら、Steamworks SDK をダウンロードしてください。 SDK を解凍し /YourUnrealEnginePath/Engine/Source/ThirdParty/Steamworks/Steam[Current Version]/sdk へコピーします。

プロジェクトの Steamworks SDK を更新する場合は、プロジェクトの Steamworks パス [Current Version] も必ず更新するようにしてください。
/YourUnrealEnginePath/Engine/Source/ThirdParty/Steamworks/Steam[Current Version]/sdk
プロジェクト ディレクトリの Steamworks.build.cs も更新する必要があります。
SteamworksCSFile.png
このれいでは [Current Version]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 をエンジンのプリコンパイル バージョンに対して使用するには、ダイナミック リンク ライブラリのいくつかを Valve 社の SDK から適切なフォルダにコピーするだけです。また、ソースに対してエンジンを再コンパイルする場合は、SDK を適切な場所に配置する必要があります。次に、関連する再配布可能なファイルを、SDK の「/redistributable_bin/」ディレクトリから次の場所にコピーします。

64 ビット ライブラリの一部は Steam クライアント ディレクトリにあります (この記事の執筆時点で、Valve 社 はすべてのライブラリを SDK に含めていません)。

/YourUnrealEnginePath/Engine/Binaries/ThirdParty/Steamworks/Steam[Current Version]/Win64 steam_api64.dll steamclient64.dll tier0_s64.dll vstdlib_s64.dll

/YourUnrealEnginePath/Engine/Binaries/ThirdParty/Steamworks/Steam[Current Version]/Win32 steam_api.dll steamclient.dll tier0_s.dll vstdlib_s.dll

tier0_s.dll」と「vstdlib_s.dll」の両方のファイルは、専用サーバー ビルドの「-force_steamclient_link」フラグを使用して明示的にリンクする場合にのみ必要です。クライアント ビルドにこれらのファイルは必要ありません。

UE4 バージョン 4.22 以降: /YourUnrealEnginePath/EngineOrGameFolder/Binaries/Mac/YourGame.app/Contents/MacOS libsteam_api.dylib」(/redistributable_bin/osx32 から - 動的ライブラリ (.dylib) は 32 ビットと 64 ビットを両方サポートします)

UE4 バージョン 4.23 から、Mac ユーザーも以下のコマンドを実行する必要があります。 /YourUnrealEnginePath/Engine/Binaries/ThirdParty/Steamworks/Steam[Current Version]/Mac/ * 以下のコマンドを実行すると `libsteam_api.dylib` が生成されます。

install_name_tool -id @rpath/libsteam_api.dylib /redistributable_bin/osx32/libsteam_api.dylib

Linux ユーザーは、実行可能ファイルと一緒に次のファイルをリンクして提供する必要があります。

/YourUnrealEnginePath/Engine/Binaries/ThirdParty/Steamworks/Steam[Current Version]/i686-unknown-linux-gnu/libsteam_api.so * redistibutable_bin/linux32/libsteam_api.so

/YourUnrealEnginePath/Engine/Binaries/ThirdParty/Steamworks/Steam[Current Version]/x86_64-unknown-linux-gnu/libsteam_api.so * redistibutable_bin/linux64/libsteam_api.so

Steam App ID

Steam Online Subsystem を使ったすべてのゲームは有効なアプリケーション ID が必要です。アプリケーションの Steam App ID が分からないと Steamworks API が正常に動作しません。 UE4 は Steam を初期化する前に「steam_appid.txt」を生成します (エンジンの正常なシャットダウン中に UE4 はこのファイルを削除します)。 Steam は現在の作業ディレクトリからテキスト ファイルを探すため、「steam_appid.txt」はアプリケーションの実行可能ファイルと同じディレクトリに配置する必要があることに注意が必要です。 また、このファイルを Steam 画像に含めることはできません。

steam_appid.txt」を開くと [SteamDevAppId] エントリが表示されます。これは Steam にアプリケーション ID を示すフィールドです。 これで Steam クライアントでゲームを起動する必要がなくなります (実行されている必要はあります)。

アプリケーションをテストする場合は 480SteamDevAppId を使用できます。これはデベロッパー全員が共有するテスト用のアプリ ID です。 前述したテスト用のアプリ ID でほとんどの Steam インターフェースをテストできますが、アプリケーションをシッピングするには Steam App ID が必要です。

シッピング ビルド

シッピング ビルドでは、エンジンはログイン ユーザーがゲームに適切にサブスクライブしているかを確認し、エンジンのテストで「False」が返ってきた場合はシャットダウンします (これはゲームを保護する方法の 1 つです)。 さらに、Steam DRM (『Steamworks SDK』を参照) を使用するとゲームを改ざんからさらに保護することができます。

アプリケーション設定を構成する

Unreal Project Browser を使用して新しいプロジェクトを作成する場合、[Online Subsystem] 設定が DefaultEngine.ini に存在しません。サンプル プロジェクトのうち 1 つを変更する場合は [Online Subsystem] 設定がすでに存在している可能性があります。

Steam App ID とともにアプリケーションの Steamworks SDK を設定したので、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. アプリケーションで Steam Online Subsystem を使用するように UE4 を設定しました。次に、以下の設定を追加して 「OnlineSubsystemSteam」 モジュールを構成する必要があります。

    [OnlineSubsystemSteam]
    bEnabled=true
    SteamDevAppId=480
  4. 最後に、アプリケーションを接続するネット ドライバに 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 のバックエンド サービスのピアツーピア インスタンスとして存在します。サーバーとは異なり、参加する前にピン時間や現在の参加ユーザー数などのロビーに関する情報を利用できません。通常、これらはリッスン サーバーに使用します。ロビーを設定するには bUsesPresence フラグに true をセットします。

サーバーの詳細

サーバー インスタンスを設定するには bUsesPresence フラグが false であることを確認します。専用サーバーには次の 3 つのマクロが必要です。この 3 つがすべて、パートナー パネルの Steam 専用サーバー ツール ページの値と一致する必要があります。これらの値が一致しない場合、Steam ネットワークは専用サーバーを表示しません。

UE4 マクロ

Steam 名

説明

UE4_PROJECT_STEAMPRODUCTNAME

STEAMPRODUCTNAME

Valve 社はこれをビルド ID にすることを推奨しています。しかし通常は、AppID を文字列として使用するか、余分なシンボルのない簡単な製品名を使用します。

ビルド ID の更新などでこのフィールドを変更すると、Steam はマッチメイキングのために古い名前のアクティブなサーバーをすべて無視し、パートナー バックエンドでツール情報を変更するよう要求します。

UE4_PROJECT_STEAMGAMEDIR

STEAMGAMEDIR

これは通常、ゲームのフォルダ名であり、スペースやシンボルを含めることはできません。スペースやシンボルを含まない名前である限り、これがフォルダ名である必要はまったくありません。

UE4_PROJECT_STEAMGAMEDESC

STEAMGAMEDESC

Valve 社は、これを製品の正式名に設定することを推奨しています。

UE4_PROJECT_STEAMSHIPPINGID

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 Online 認証

Steam は、プラットフォームが提供する独自のサーバー関連機能に対し、アクセスを制御する特別な認証システムを備えています。この対象は、広告サーバーとプレーヤー数、パブリッシャーと Valve 社の不正対策停止リストの取得と対応、ライセンス チェックの実行などです。 Unreal Engine 4 は、FOnlineAuthSteam クラスを介してこの機能のインターフェース機能を提供します。 Steam Online Subsystem を使用するようにアプリケーションを設定すると、SteamAuth パケット ハンドラ コンポーネントを有効化してこれらの機能を利用できるようになります。

ESteamAuth を有効化する

SteamAuth を有効化するには、以下を「DefaultEngine.ini」に追加するか、もしくは Steam Online 認証をサポートしている各プラットフォームの「プラットフォーム固有のエンジン.ini」ファイル (「WindowsEngine.ini」、「LinuxEngine.ini」、「MacEngine.ini」など) に追加します。

[PacketHandlerComponents]
+Components=OnlineSubsystemSteam.SteamAuthComponentModuleInterface

有効化すると、Steam Online Subsystem インターフェース (SteamOSS) 機能である GetAuthInterface を使用して SteamAuth 機能にアクセスできます。

SteamAuth を有効化すると、アプリケーションは参加している全プレーヤーに (Steam サービスに対する) 認証手順を実行します。SteamAuth はデフォルトでこのチェックに失敗したプレイヤーを追い出しますが、このビヘイビアはオーバーライドできます。

SteamAuth デリゲート

SteamAuth システムにはデベロッパーがオーバーライドできるデリゲートが 2 つあります。OverrideFailureDelegateOnAuthenticationResultDelegate です。

プレーヤーが Steam 認証なしでサーバーに参加を試みた場合、またはセッション中にプレーヤーが Steam 認証を失った場合は、OverrideFailureDelegate がプレイヤーの FUniqueNetId とともに呼び出されます。 デフォルトでは、SteamAuth はそのプレイヤーをゲームから追い出します。 ただし、このデリゲートがバインドされている場合、デフォルトのビヘイビアは一時停止されます。そのビヘイビアが依然必要な場合、デベロッパーはプレーヤーを手動で追い出す必要があります。

OnAuthenticationResultDelegate は Steam の認証サービスからの応答を処理し、プレーヤーの FUniqueNetId と認証の実行が成功したかを示すブール値を提供します。

追記

IPNetDriver を使用する

デフォルトでは、UE4 の Steam OSS はデフォルトのソケット サブシステムとして Steam ネットワークを使用します。4.22 では、OnlineSubsystemSteam.bUseSteamNetworkingfalse に設定してこのビヘイビアを無効化できます。これを行うには、以下を「DefaultEngine.ini」に追加するか、もしくはサポートする各プラットフォームで「プラットフォーム固有のエンジン.ini」ファイル (「WindowsEngine.ini」、「LinuxEngine.ini」、「MacEngine.ini」など) に追加します。

[OnlineSubsystemSteam]
bUseSteamNetworking=false

4.22 より前のバージョンでは、RegisterSocketSubsystem 関数を呼び出す「SocketSubsystemSteam.cpp」を変更し、bool パラメーターを false に変更します。また、プロジェクトのコンフィギュレーション ファイルでネットドライバを変更する必要があります。

モジュール設定

Unreal Engine Steam モジュールをプロジェクトの一部として含める必要があります (詳細なヘルプは 「UnrealBuildTool ターゲット ファイル」 を参照してください)。 具体的には、「mygame.build.cs」のコンストラクタに次の行を追加れば、Steam モジュールがゲームと共にビルドされます。

DynamicallyLoadedModuleNames.Add("OnlineSubsystemSteam");

Mac での Steam Overlay

Mac での Steam Overlay は、Steam クライアントでゲームを起動する必要があります。これを行うには、まず Steam の [Games (ゲーム)] メニューから [Add a Non-Steam Game to My Library (非 Steam ゲームをマイ ライブラリに追加)] オプションを使用してゲームをライブラリに追加する必要があります。

Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback