Let's Enjoy Unreal Engine

Unreal Engineを使って遊んでみましょう

UE4 ShippingでSteamworksを利用できるようにする

PCでゲームをリリースする際、一番多くの方がリリースしたいのはやはりSteamだと思います。Steamでリリースするのはかなりハードルが高く、各種申請や審査を乗り越えて基本的に全て英語でValve社とやりとりしなくてはなりません。

それを乗り越えて「やっとリリースだ!」となった場合に、いざSteamのリリースバージョンビルドを実行してみるとSteam固有の機能(マッチメイキングや実績など)が動かないことがあります。
これはなぜかというとUE4はDevelopmentビルドとShippingビルドでSteam用の機能を切り替えるように処理しているためです。今回はそういった方に向けての非常に限定的ながらも重要な話をしてみたいと思います。

今回の話はUE4.26.2時点での話となりますので、それより前のバージョンや4.27や5.0など後のバージョンでは多少違うことがありますのでご了承ください。

前提

ここからの前提は全てSteamのSteamworks上で各種設定を完了し、リリース用のAppIdを取得しているという前提で話をします。登録までだけでもかなり長いので、以下の記事を参考にがんばって開発者登録を行ってください。

tsukinowa.hatenablog.jp

また実際に動作確認にはビルドをアップロードする必要がありますので、アップロードまでの手順もしっかりと確認しておく必要があります。この辺りは細かく変わっていることが多いので、手探りや試行錯誤が必要かもしれません。

tsukinowa.hatenablog.jp

ビルドが完了し、アップロードまで出来るようになっていれば、リリース時に利用するアプリ専用のAppIdが発行されているはずですので、これを今回は使うことになります。

Steamworksを使えるようにするために必要なもの

現在Steamでアプリをリリースするためには必ずSteamworksを利用する必要があります。このためにOnlineSubsystemSteamを利用することとなり、UE4の公式ドキュメントにも詳しい解説があります。

docs.unrealengine.com

が、4.26現在ここに書かれている情報は4.22の時とはかなり違うようです。まず、Steamworks SDKのダウンロードは必要なさそうです。そしてエンジン自体のコンパイルも必要ありません。(少なくともうちの環境ではエンジンをコンパイルしなくても動作しています)

「steam_appid.txt」も必要とありますが、これはあくまでも開発中に利用するための一時的なファイルなので、Shippingビルド時には必要ありません。Steamworksドキュメントにもアップロードする際に必ず取り除いてくださいと記載があります。

その他の「DefaultEngine.ini」への設定はドキュメント同様に行っておきます。ただし、「SteamDevAppId」はDevelopment用のため、Shipping時には効果がなくなりますので注意してください。

リリース用のAppIdをアプリに埋め込む

ここからが特殊な手順となります。ドキュメントにもある通り「UE4_PROJECT_STEAMSHIPPINGID」というマクロがUE4.22以降で存在しており、このマクロにSteamworksで取得したゲームアプリ用のAppIdを書き込む必要があります。

このマクロに値を書き込むためには、Target.cs上にDefineを追加してからエンジンビルドを行うか、直接プラグイン内のソースコードに埋め込むかのどちらかになります。ここではエンジンビルドしない方法を解説しているので少し特殊な方法を利用します。

unrealengine.hatenablog.com

上記記事を参考に、プロジェクト内の「Plugins」以下にUE4のエンジン内にある「OnlineSubsystemSteam」をコピーします。プラグインの場合はエンジンモジュールではないためUnreal Build Toolの書き換えは必要ありません。

C++コードの書き換えとなりますので、プロジェクト自体をC++プロジェクトにしておく必要があります。"OnlineSubsystemSteam.cpp"を開き、43行目辺りのコードを書き換えます。

/* Specify this define in your Target.cs for your project
 *
 * This helps the SteamAPI find your project on shipping builds
 * if your game is launched outside of Steam.
 */
//#ifndef UE4_PROJECT_STEAMSHIPPINGID
#define UE4_PROJECT_STEAMSHIPPINGID 1234567 // ここの数値を固有のAppIdにする
//#endif

この書き換えにより、アプリ内に確実にAppIdが埋め込まれ、Shippingでビルド時でも確実にSteamworksの機能が利用できるようになります。おそらくこれでSteamを使ったマッチメイキングや実績機能がShipping時でも動くようになるはずです。

確認方法

最終的な確認方法はSteamworksのデポにアプリをアップロードし、Steamクライアントからゲームアプリをダウンロード後に直接起動してみてください。これにより確実にSteamを通した確認ができます。ゲームアプリ起動中にShift+Tabキーを押すことで、Steamオーバーレイが表示されるので正常に動作している場合にはSteamオーバーレイが表示されて起動中のゲームアプリ名が表示されているはずです。