Online Subsystem Steam

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

Choose your operating system:

Windows

macOS

Linux

Contributors: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. 「..\..\Plugins\Online\OnlineSubsystemSteam\Source\Private\」に移動して「OnlineSubsystemSteamPrivatePCH.h」を開くと、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 クライアントでゲームを起動する必要がなくなります (実行されている必要はあります)。

アプリケーションをテストする場合は 480 SteamDevAppId を使用できます。これはデベロッパー全員が共有するテスト用のアプリ 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"

この後は、ゲームに セッション を使用するか、または ロビー を使用するかによって手順が異なります。

セッションを使用する

ゲームにセッションを使用する場合、 OnlineSubsystemSteam の下に以下を追加します。

bInitServerOnClient=true 

ロビーを使用する場合、この値を設置する必要はありません。

ユーザーがセッションを作成し参加できるように bInitServerOnClient 設定を有効にする必要があります。この設定を有効にしないと、Steam オンライン サブシステムが正常に初期化されません。Create Session ブループリント ノードと同等の C++ 関数が動作せず、セッションに参加することができなくなります。

最終結果

この短いガイドの最後では、アプリケーションの「 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
; If using Sessions

; bInitServerOnClient=true

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

サーバーとロビー

Steam は、ロビーを介して (専用とリッスン サーバー ゲームの両方で) ピアツーピアのマッチメイキングをサポートし、専用サーバーを実行する機能を提供します。ユーザーはロビーを使用してゲーム サーバーに関する情報を知ることができます。これは通常、プレイしているマップやモードなど、リッスン サーバー ゲームに関するゲーム固有の情報の伝達に使用します。また、ユーザーはマッチメイキング システムを介して、参加することなくロビーに接続した他のユーザーの数を確認できます。専用サーバーはロビーとは異なるバイナリであり、ゲームのサーバー側の機能を実行およびホストします。Steam の機能、実装、デベロッパー インターフェースの詳細は、Steam サイトの 「パートナー ドキュメント」 を参照してください。

ロビーの詳細

ロビーは基本的にチャット ルームで、Steam のバックエンド サービスのピアツーピア インスタンスとして存在します。サーバーとは異なり、参加する前にピン時間や現在の参加ユーザー数などのロビーに関する情報を利用できません。通常、これらはリッスン サーバーに使用します。ロビーを設定するには bUsesPresence フラグと bUseLobbiesIfAvailable フラグに true をセットします。これらは、C ++コードの IOnlineSession::CreateSession メソッドに渡される FOnlineSessionSettings オブジェクトで設定できます。

サーバーの詳細

サーバー インスタンスを設定するには 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 つあります。 OverrideFailureDelegate OnAuthenticationResultDelegate です。

プレーヤーが Steam 認証なしでサーバーに参加を試みた場合、またはセッション中にプレーヤーが Steam 認証を失った場合は、 OverrideFailureDelegate がプレイヤーの FUniqueNetId とともに呼び出されます。 デフォルトでは、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 」を変更し、 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 ゲームをマイ ライブラリに追加)] オプションを使用してゲームをライブラリに追加する必要があります。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル