SteamにUE4のゲームをリリースする為の設定

# はじめに
[公式ドキュメント「Online Subsystem Steam」](https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/Online/Steam/)は現状[いくつか問題がある](#公式ドキュメントの問題点)為、
UE4にデフォルトで指定してあるSteamSDKのまま設定する方法を書きます。

UE4のゲームをSteamにリリースする際、とても困りましたので、
[「入替人-ReplaceR-」](https://store.steampowered.com/app/1667160/ReplaceR/)をSteamに登録した際に覚えた内容を、残しておこうと思います。

解説環境：Unreal Engine 4.27.2 Windows

# もくじ
[はじめに](#はじめに)
[1. Unreal Engine 設定](#1-unreal-engine-設定)
[2. Steamworks 設定](#2-steamworks-設定)
[3. ゲームをアップロード](#3-ゲームをアップロード)
[4. Steam 機能追加](#4-steam-機能追加)
[0. ストアページの公開まで](#0-ストアページの公開まで-1)
[公式ドキュメントの問題点](#公式ドキュメントの問題点)
[参考リンク](#参考リンク)
[おわりに](#おわりに)


# 0. ストアページの公開まで
[__・Steamworks登録からストアページの公開まで__](#0-ストアページの公開まで-1)
この項目は、UE4が関係ないので、ページの下部に書きます。




# 1. Unreal Engine 設定
:::note info
UE4 4.27.2 のサードパーソンテンプレートを、Steam用に設定するまでを書きます。
:::
![bandicam 2021-12-04 16-04-41-985.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/1e8728a9-7838-64b6-27ac-fb2a2608a4b6.jpeg)
プロジェクト名：Steam_Test_427

## 1.1. Online Subsystem Steam
まず、__プラグイン__の項目から、__「Steam」__と検索をかけて、
__「Online Subsystem Steam」__のチェックを入れます。
![Qiita_02.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/aa10c631-40f9-2ca6-f410-298f9e24166e.jpeg)
再起動を要求されるので、再起動します。

## 1.2. DefaultEngine.ini
プロジェクトフォルダの中の __DefaultEngine.ini__ に情報を追加します。
__Steam_Test_427（プロジェクトフォルダ）__＞ __Config__ ＞ __DefaultEngine.ini__
![Qiita_03.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/e89be593-df21-cedd-ab4d-a97a4a8399be.jpeg)
これを__「メモ帳」__などで開き、下記文字列をコピペします。[≫公式の記述はこちら](https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/Online/Steam/#%E5%AE%8C%E4%BA%86%E6%B8%88%E3%81%BF%E3%81%AE%E8%A8%AD%E5%AE%9A)

```.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"
```

この中↑で、```SteamDevAppId=480``` の __480__ の部分だけ後で、自分のゲーム固有の番号に書き換えることになります。
既にアプリIDを取得済みの場合は、この段階で480を自分の数字に変更しても良いです。
![Qiita_04.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/ff5871a5-415b-bb9b-ef4b-aa345c7ea2aa.jpeg)
（最下段へのコピペでいいです。保存後、UE4の機能で自動的に適宜適切な列に修正されます。）

## 1.3. Steam動作確認
ちゃんとSteamとの連動機能が動いているかをチェックしたいと思います。
__Steamを起動__して、__ログイン__しておきます。
![Qiita_05.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/4e1e7d8f-3605-016e-abe8-849b4c7b8e20.jpeg)
Steamがインストールされていない場合や、アカウントを持っていない場合は、
下記サイトでSteamのインストールとアカウントの作成を行ってください。

https://store.steampowered.com/

### スタンドアローンモードでプレイ
簡易的にSteamの機能を確認する際は、スタンドアローンモードでプレイします。
![Qiita_06.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/ffa6aa10-ca34-73d7-6a09-064ee8554bc3.jpeg)
プレイ画面右下にSteamのオーバーレイ表示が出てきたら、ここまでの手順は大丈夫です。

:::note alert
Unreal Engine 4.25 4.26 は、スタンドアローンでSteamオーバーレイが機能しないバグがあります。 4.27 で修正されました。 4.24以前はスタンドアローンで機能します。
:::

4.25 4.26 の場合は、簡易的にDevelopmentモードでパッケージ化して確認するか、
alwei先生が記事にしてくれている方法で確認してください。

https://unrealengine.hatenablog.com/entry/2021/07/24/204236

また、__何も設定せずに__スタンドアローンモードでゲームを起動すると、閉じることが出来ません。
閉じ方が分からない場合は、

:::note info
「Alt + F4」 を押して閉じてください。
:::

もしくは、先にQuit（閉じる）を設定しておくのが良いでしょう。
![bandicam 2021-12-12 15-07-39-617.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/42334b00-c2b0-7f97-3f47-70995146d35e.jpeg)

## 1.4. アプリケーションID 指定
ここからは、[Steamworksの登録](#0-ストアページの公開まで-1)が済んでいる前提で、説明を進めます。

アプリケーションIDの確認をしたいと思います。
アプリ管理画面などの、ゲームタイトル名の隣にある数字がアプリケーションIDです。
![Qiita_07.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/bc26a4cc-f23e-8f35-d122-46d488933b32.jpeg)

アプリIDを、DefaultEngine.ini に書き込みます。
__Steam_Test_427（プロジェクトフォルダ）__＞ __Config__ ＞ __DefaultEngine.ini__
![Qiita_08.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/a78a8958-b646-888e-6c70-b5ae9f0bfb56.jpeg)

## 1.5. UE4 パッケージ化設定
Windows版のパッケージ化の設定をします。
4.27.2のデフォルト設定から変更した方がいいと思う点は、以下の三つになります。
![Qiita_11.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/71d2ec97-b913-6b39-890a-95f304b614f5.jpeg)


- __ビルドコンフィギュレーション__　Shipping　（完成版はShippingにします。）
- __完全に再ビルド__　のチェックを入れる　（完成版はチェックを入れます。）
- __前提条件のインストーラを含む__　のチェックを外す　（Steamへの投稿の場合はチェックを外します。）

確認したい項目として、
![Qiita_10.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/6e2059a5-e566-1d5f-b498-fbb5697ea825.jpeg)
パッケージ化の詳細欄の中の
__圧縮およびクック済みのパッケージを作成__　のチェックが入っているかを確認しておきたいですが、
4.27.2では、デフォルトでチェックが入っていました。
（4.26以前はチェックが入っていないので、入れた方が良いです。）

### フレームレート指定
- 可変フレームレートの場合は、__「フレームレートをスムージング」__にチェック。
- 固定フレームレートの場合は、__「固定フレームレートを使用」__にチェック。

![Qiita_15.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/79c2b708-ea30-ce79-832e-bb9946bb3646.jpeg)
4.23以前は、__フレームレートスムージング__のチェックがデフォルトでしたが、
4.24以降は、チェックがはずれているのがデフォルトです。

:::note alert
ここの確認をせずにパッケージ化すると、とても処理負荷の高いゲームが出来上がります。
:::


### 不要なプラグインをチェック
丁寧に使わないプラグインを確認して消すのがベストですが、
最低限として、__「VRゲームでない場合」__は、__「VR」__で検索して、全部チェックを切っておくことをお勧めします。
![Qiita_12.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/aa2ab066-b01a-4c52-056e-3e6ef6407c68.jpeg)

:::note warn
このVRプラグインのチェックが入っていると、ゲーム開始時に、VR機器が起動してしまい、
場合によっては正常にプレイできない事があります。
:::

またデータ容量の大きいプラグインを確認する方法は、碧樂クーさんの記事が__とても参考になります。__

https://wakanya.hatenablog.com/entry/TinyPackage#25-%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%AA%E3%81%84Plugin%E3%81%AE%E7%84%A1%E5%8A%B9%E5%8C%96

2015年のalwei先生も確認するように言っています。

https://unrealengine.hatenablog.com/entry/2015/08/14/211733

4.27は、他のバージョンに比べて、プラグインの量が多いので、プラグインの整理をすると、恩恵が大きそうです。[≫参考](https://twitter.com/O_Y_G/status/1473564409788506114?s=20)

4.27.2のプラグインの容量測定してみたので、こちらもご確認ください。

https://qiita.com/O_Y_G/items/b74f54205cfe4c6cf8f0

## 1.6. パッケージ化
Steam向けの設定ができたのでWindows用にパッケージ化します。
![Qiita_13.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/a2184fd6-90c4-f02d-b95a-d6f961ef26f7.jpeg)
なお、4.25以降は64bit版のみがデフォルト設定になっています。
32bit版のパッケージ化がしたい場合は、碧樂クーさんの記事に、32bitに対応する方法が載っています。

https://wakanya.hatenablog.com/entry/TinyPackage#23-32bit%E3%83%91%E3%83%83%E3%82%B1%E3%83%BC%E3%82%B8%E3%81%AE%E5%88%A9%E7%94%A8

![bandicam 2021-12-12 18-09-03-685.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/0f05ba42-827f-46a9-9d75-4fa0e0c0c7af.jpeg)
パッケージ化が完了したら、以上のデータができあがるので、これをSteamにアップロードします。






# 2. Steamworks 設定
ここからは、[ストアページの準備](#03-ストアページを準備)がほぼ済んでいる前提の確認になります。
![Qiita_38.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/11f6e1b6-7146-e487-fb54-ad97549bc9c7.jpeg)
アプリIDを仮に　0000000 として説明します。

## 2.1. アプリケーション 一般
タイトル名と対応OSのチェック。
![Qiita_17.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/42f95ed1-0dfd-1fd4-7839-8099dbd998a6.jpeg)

## 2.2. アプリケーション Steam入力
必須設定項目に入っていないですが、ここを未設定だと、Steam側から設定しろと言われます。
![Qiita_27.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/c4e28194-24e2-249d-c796-9ee428de2b2f.jpeg)

:::note warn
ゲームパッド非対応の場合は、「キーボード（WASD）とマウス」を選ぶことで、
（一応）ゲームパッドでも動くようになります。
ゲームパッドの対応を考えてない場合は、こちらを選んでください。
:::

:::note info
UE4でXboxコントローラー対応し、「一般のゲームパッド」を選択。
下のチェックを全部入れると、全てのコントローラーで動かせます。
この機能とても便利です！
:::

より詳細な設定もできるので、ゲームパッドの設定にこだわりたい場合は、確認してみて下さい。

https://partner.steamgames.com/doc/features/steam_controller

## 2.3. インストール インストール全般
ここで、ゲームのフォルダ名や、.exeファイル名の指定をします。
![Qiita_21.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/7b324f66-1fbf-64bb-8e3b-2f4a74b902d7.jpeg)
一応の確認です。

## 2.4. インストール 再頒布可能コンポーネント
Steam側のスタッフから、「君のゲームはこの二つを入れると良さそう」というコメントをもらったので、
おそらく、現行のバージョンの場合は、下記2コンポーネントにチェックを入れるといいと思います。
![Qiita_22.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/af3d87e3-3ffe-676a-dc53-814f7a66d7a7.jpeg)
Unreal Engine のバージョンによっては変わってくると思います。

## 2.5. SteamPipe デポ
SteamPipeのタブのデポを選び、__「新しいデポを追加」__します。
![Qiita_24.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/1e7986a5-daf7-342f-0610-aa8611b4c1da.jpeg)

:::note info
デポとは
Depot の略で、ここでは「貯蔵所、倉庫」の意味で用いられているようです。
体験版や、ベータ版、Mac版など、複数のバージョンを取り扱う場合は、複数のデポを用意することになります。
:::
https://partner.steamgames.com/doc/store/application/depots?l=japanese

![Qiita_25.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/74daa8c5-3b3c-9815-c662-5879944ee679.jpeg)
今回は、Windows64bitの完成版だけをアップロードするので、一つだけ追加します。
![Qiita_23.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/6f8a1310-6476-4e43-5bd3-568faa4ed68b.jpeg)
一つ目のデポは、自分のゲームのメインデータだと分かりやすいデポ名にすると良いと思います。
デポIDは、アプリID+1～9の番号になるようです。
![Qiita_26.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/2d3bec54-69f6-65f5-1196-a267b61dffd2.jpeg)
アプリID
デポID
をメモっておきます。



# 3. ゲームをアップロード
[__Steamの公式ドキュメント__](https://partner.steamgames.com/doc/sdk/uploading)もあるのですが、説明が足りない点があるので、方法を載せます。

## 3.1. SteamSDKをダウンロード
UE4の設定は、デフォルトのSDKを使っていますが、アップロードツールもSteamSDKの中に入っているので、
現在の最新バージョン　1.53a　をダウンロードします。

https://partner.steamgames.com/downloads/list

![Qiita_28.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/91fd5186-08c9-d44f-12b2-650f2ef2539b.jpeg)
Zipデータを解凍して、自分がわかりやすい場所に移動させてください。
割と頻繁にこのツールを使う事になるので、どこに置いたか忘れるような場所には置かない方が良いです。

## 3.2. アップロード準備

今回使うのは、下図の __「tools」__ のフォルダーの中身だけです。
![Qiita_29.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/89031d0b-8e2c-462e-96d8-32110e72e9c5.jpeg)
以下の場所に新規フォルダーを作成。
__「tools」＞「ContentBuilder」＞「content」＞「新規フォルダー作成」（windows_content）__
![Qiita_30.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/f66aa4b2-1a8e-4a9e-5888-b670d4421a2f.jpeg)
（フォルダー名は、英数字で、自分が分かり易ければなんでもいい。）

作ったフォルダーの中に、UE4のパッケージデータをコピーします。
![Qiita_31.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/1064b9b9-e344-5b95-8266-64619f05b780.jpeg)

## 3.3. SteamPipeGUI
次に、__SteamPipeGUI.zip__ を解凍してください。
![Qiita_32.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/4a5dafa1-9a7a-fd4c-f68a-4ddb08f435d8.jpeg)
中身の __SteamPipeGUI.exe__ をダブルクリックで開き、
![Qiita_33.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/4c45c842-95b3-39a4-1876-14672c9b6f7b.jpeg)
上図の画像を参考に入力後、Uploadを押します。

初回のアップロード時には、処理中に本人確認のようなものがあり、
E-mailにSteamから送られてくるコードを打ち込む必要があります。
![Qiita_34.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/68ff6489-c8ac-c0f1-00d8-fa0a7451a710.jpeg)
塗りつぶしすぎてわかりずらいですが、
__Success!__ の文字が出てれば、アップロード出来ていると思います。
![Qiita_35.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/f8a18fd6-3bab-2b54-0b36-93de68b8784c.jpeg)

このあたりに関しては、いくつか記事にしてくれている方々がいるので、
うまくいかない方は、確認してみるといいかもしれません。
公式ドキュメントと、UE4関連で検索しても全然わからず苦労しました・・・。

https://indiegamesjapan.com/archives/2021/04/184/

https://kan-kikuchi.hatenablog.com/entry/Steam_Upload_Windows

https://tsukinowa.hatenablog.jp/entry/2018/07/31/235304

## 3.4. SteamPipe ビルド
アップロードが完了したら、Steamworks の SteamPipe ビルド の項目を開きます。
![Qiita_36.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/b16e1e8e-6a43-efd6-9901-4f27f9eaaf7d.jpeg)
__「--アプリブランチを選択--」__ を　__「default」__ に変更し、__「変更をプレビュー」__のボタンを押します。

あとは、任意のコメントと、__「今すぐビルドをライブに設定」__ を押すと、
アプリの審査を受けることが可能になります。
![Qiita_37.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/12c77a2c-b020-7293-2029-43192fdbc557.jpeg)

これでゲームのアップロードは完了です。

## 3.5. ゲームビルドのレビュー
Steamのスタッフのゲームビルドレビューを受けて、審査が通れば、
ゲームの公開のタイミングを自分で決められるようになります。（ボタン押せば公開）

基本的には動作確認が取れれば、審査が通るような気がします。




# 4. Steam 機能追加
アップロードするだけであれば、ここまでで書いた通りで可能ですが、
Steamの機能を活用する方法をいくつか載せようと思います。

## 4.1. Steam実績

https://partner.steamgames.com/doc/features/achievements?l=japanese

自分のように、読んでも意味が分からない人用に、設定方法を書いておきます。

:::note warn
ゲームがまだ非公開の状態の場合、正常に動くかどうかのデバッグは、出来ないようです。
:::


### Steamworks 設定
まず、[Steamworks](https://partner.steamgames.com/) のアプリ管理画面から、
__「データ＆実績」＞「実績」__を選択
![Qiita_44.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/272972b7-c47b-cc47-4a50-8086db8f682f.jpeg)
__「新しい実績」__をクリックします。

最初に打ち込む内容は、英語版表示の設定です。
複数言語対応する場合も、まず英語版を作った後、ローカライズ制作をします。
![Qiita_46.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/5aa207ae-7c74-7d64-fc8f-230e88c885ae.jpeg)

- __ACH_00_Test__ （仮の文字列）UE4側にこの文字列を打ち込むので、自分が分かりやすい英数字を打ちます。アンダーバーは使えるようです。ドキュメントに大文字で書かれてあるので、大文字にしてあります。（小文字未検証）
- __test_Achievement__ （仮の文字列）プレイヤー側に、伝わる実績名です。
- __memo__ （仮の文字列）実績の達成条件などを書きます。

まず、回数条件などが無い設定を説明します。
この３つを埋めたら、__一旦保存__をしてから、画像をアップロードします。
文字情報を一度保存してからでないと、画像のアップロードがうまくいかない気がします。
画像は、256×256pixelで用意してください。
![Qiita_47.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/dab26a2e-b307-02dd-f632-43e76a01341a.jpeg)
画像のアップロードと保存ができたら、__「公開」__タブをクリック
![Qiita_48.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/55a4be3e-fce5-e749-5f83-f24267ef72c1.jpeg)
__「公開の準備」__のボタンを押し
![Qiita_50.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/b419cb65-6390-eea8-a797-22751d5e9ecb.jpeg)
__「Steamに公開」＞「本当に公開する」__　まで済ませると。
![Qiita_53.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/0a82d67a-3c9d-067e-f619-a71e527c64d8.jpeg)
Steam上に実績が、実装されます。

### Unreal Engine 設定
__DefaultEngine.ini__ に実績を追加します。
__「プロジェクトファイルフォルダー」＞「Config」＞「DefaultEngine.ini」__をメモ帳などで開き
![Qiita_54.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/63a89967-ed16-58f5-4fef-21e260186e35.jpeg)
Steam設定の際に追加した
__[OnlineSubsystemSteam]__の行を見つけ
__SteamDevAppID__の真下に一行追加します。
![Qiita_55.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/dd0ba29e-a8b9-d1e2-c9eb-61e0d0503c62.jpeg)
``` Achievement_0_Id="" ```　__""__の間に先ほどSteam上で指定した文字列を足します。
``` Achievement_0_Id="ACH_00_TEST" ```

実績を二つ三つと増やしていく場合、下に行を増やしていきます。
``` Achievement_0_Id="" ``` ←この文字列を必要な行コピペしてください。

```
Achievement_0_Id="ACH_00_TEST"
Achievement_1_Id="ACH_01_B"
Achievement_2_Id="ACH_02_C"
Achievement_3_Id="ACH_03_D"
```

Steamworks上も同じ数増やす必要があります。
Steamworks上とID番号が合うように確認します。

そこまで済んだら、ブループリント側で、実績を取得するタイミングで、以下のように組みます。
__ブループリント設定__
![Qiita_56.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/d9b2c70e-706e-7def-d08b-1a224fa3f796.jpeg)
これだけで実績が解除されます。
実績が解除されるか、スタンドアローンモードで試してみてください。（Steamログイン状態で）

:::note warn
実績は一度解除されると、そのアカウントは、解除状態のままになるので、
一度解除した実績が、修正後などにちゃんと機能しているかを再度確認する場合は、複数のSteamアカウントが必要になります。
:::


## 4.2. Steamランキング

https://partner.steamgames.com/doc/features/leaderboards?l=japanese

ランキングデータを、ゲーム上に引っ張ってくる為には、C++で制御する必要があります。

この項目では、Blueprintだけで、Steamランキングにスコア情報を「送る」方法を説明します。

### Steamworks 設定1
[Steamworks](https://partner.steamgames.com/) のアプリ管理画面から、__「データ＆実績」＞「データ」__を選択
![Qiita_62.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/92ae164c-d83e-e2d1-8eab-ed4bf57c1fde.jpeg)
__「新しい統計」__から__API名__ の欄に、__「Score_Score」__（任意の文字）と打ちます。

:::note info
ScoreRank_ScoreRank など、「 _ 」アンダーバーを挟んで、左右に同じ単語を打つ。
:::

新しい統計データを作ったら、__「公開」__から__「公開の準備」＞「Steamに公開」__を押して、情報をSteam上に公開します。

### Unreal Engine 設定
ブループリントで以下のように組みます。
![Qiita_64.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/39567398-efb7-b915-a90b-913e95e9842a.jpeg)
__「Stat Name」__に__「Score」__（Steamworksで決めたAPI名の片側）を打ち込む。

ここまで組んで、__Steam__（ゲームする方）を起動して__ログイン__した状態で、__「スタンドアローンモード」__でランキング送信イベントを走らせてみてください。
うまくいっていれば、Steamworksの__ランキング__の項目に、Scoreが繁栄されていると思います。

### Steamworks 設定2
[Steamworks](https://partner.steamgames.com/) のアプリ管理画面から、__「データ＆実績」＞「ランキング」__を選択![Qiita_63.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/b24ca4d0-73c7-f43f-d5c7-496fb28a29fd.jpeg)
ランキング名が__「Score」__で、__プレイヤー__と、__スコア__の値が入った状態になっていると思います。
__「編集」__から、__コミュニティ名を入力__すると、コミュニティにランキングが表示されるようになります。
![Qiita_65.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/9f1827fa-27c7-17f9-115a-fd8e245e5142.jpeg)

### ランキングの表示
ランキングデータをUE4上に細かく持って来る為には、C++が必要です。
もしくは、プラグインを購入するのも良いと思います。

ブループリントだけだと、ランキングのURLに飛ばすくらいしか出来ないようです。
![Qiita_66.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/4ca075ad-d866-b0a7-811f-df6676f2a267.jpeg)
表示例：https://steamcommunity.com/stats/1667160/leaderboards/6827555

新しい知見を得たら、追記したいと思います。

## 4.3. Steamクラウド

https://partner.steamgames.com/doc/features/cloud?l=japanese

__複数の端末でセーブデータや設定を共有する機能。__

:::note info
ゲーム内で、セーブ機能を実装していない場合、Steamクラウドの設定は出来ません。
:::

今回、自分が作ったゲームが、複数端末でセーブデータを共有したくなるようなゲームではなかったので、必要ないだろうと思っていたんですが、
コミュニティのスレッドや、ゲームのレビュー欄で、
「Steamクラウドに対応しないんですか？」
「Steamクラウド対応してください！」
「Steamクラウド対応してればなー。」
というような、コメント（海外勢）が予想外に付いていたので、勉強がてら機能追加してみました。

必要と思う人がいるのは確かなので、機能追加した方が良いんじゃないかと思います。


### Steamworks 設定
カンさんの記事を参考に組めると思いますが、UE4の場合の設定も若干あるので、説明を書きます。

https://kan-kikuchi.hatenablog.com/entry/Steam_Cloud_Save

[Steamworks](https://partner.steamgames.com/) のアプリ管理画面から、__「アプリケーション」＞「Steamクラウド」__を開きます。
![Qiita_67.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/3855bc09-58ab-0d98-097f-b5890f640c2e.jpeg)
__「Steam クラウド設定」__の__「ユーザーごとのバイトクォータ」「ユーザーごとのファイル数」__を入力します。
![Qiita_68.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/3884d81b-9dc3-1ed0-1599-b676f8977b55.jpeg)
ここの数字が、最初何を意味しているか解らなかったんですが、
セーブデータのデータ容量と、セーブデータの数がここの数値に関わってきていて、

デフォルトのセーブの保存場所が、以下になります。
``` C:\Users\***UserName***\AppData\Local\***ProjectName***\Saved\SaveGames ```
このフォルダーの中身を確認して、セーブ容量はどれくらいか、確認してみてください。
![Qiita_69.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/b76d5634-aea1-5032-116f-5c21c8448c64.jpeg)
自分のゲームの場合は、ファイル数5　サイズが、5341バイトなんですが、ディスク上のサイズの方が大きくなるので、大きい方を基準に、余裕をもった数字がいいんじゃないかと思います。

数値の設定後、
__「ルートパス」__の__「新しい自動クラウドパスを追加する」__を押します。
![Qiita_70.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/bff4aca1-a33f-9643-ddf4-9ec09e27ee76.jpeg)
__サブディレクトリ__に```***Gamefolder***/Saved/SaveGames```__「ゲームのフォルダー名」__は書き換えてください。
__パターン__に、```*.sav```
入力したら、__更新ボタン__
![Qiita_71.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/7a5036d2-8e40-da89-7bbe-eca609f7034a.jpeg)
更新後、ページの下部の__「保存」__を押すのをお忘れなく。

保存が済んだら、__「公開」__から__「公開の準備」＞「Steamに公開」__を押して、情報をSteam上に公開します。

複数のPCで同じセーブデータが読み込まれるのを確認したら、成功しています。

## 4.4. Steamオンラインマルチ
一応標準機能とブループリントだけで、同じ空間で動く程度は組めるものの、
細かい部分で、C++が必要になる為、C++を使いたくない場合は、プラグインを使う方が賢明という判断になりました。

[Advanced Session Plugin](https://forums.unrealengine.com/t/advanced-sessions-plugin/30020) を使用した、以下の動画の通り一度組んでみることをお勧めします。

https://youtu.be/EDNF2DNLhPc


## ベータ版
修正確認用などで、本番環境以外のベータ版があった方が便利なので、
カンさんの記事を参考に組むのがいいと思います。

https://kan-kikuchi.hatenablog.com/entry/Steam_build_beta


















# 0. ストアページの公開まで
Steamworksの登録から、ストアページの公開までの手順をまとめます。

:::note info
この項目は、参考サイトの紹介がメインになります。
:::

## 0.1. Steamworks アカウント作成
Steamにゲームをリリースする為には、Steamworksへの登録が必要です。
https://partner.steamgames.com/
ゲームをプレイするアカウントと紐づく形になるので、
遊ぶアカウントと、作るアカウントを分けたい場合は、
遊ぶアカウントとは別のメールアドレスを用意しておく必要があります。

詳細な登録手順は、下記2サイトが非常に丁寧に説明してくれているので、
参照しながら登録をすると良いと思います。

https://indiegamesjapan.com/archives/2021/04/126/

https://tsukinowa.hatenablog.jp/entry/2018/01/22/233059

情報共有していただき感謝します。とても助かりました。


## 0.2. 新規 Steamworks パートナー
アカウント作成に続いて、新規 Steamworks パートナーとして登録をします。

手順に関しては、前述の2サイトを引き続き参照してもらうのが良いと思います。

https://indiegamesjapan.com/archives/2021/04/126/

https://tsukinowa.hatenablog.jp/entry/2018/01/22/233059

つまずきそうな項目としては、

### 登録料100＄
ゲーム1本につき100＄の支払いが必要になります。
（ゲームの売り上げが1000＄を超えると返還される。）
悩む場合は、[Booth](https://booth.pm/)や、[itch.io](https://itch.io/)を検討することをお勧めします。

### 個人情報入力
ガイド無しで書き込める気がしません。
入力の手順を書いていただいている方々に足を向けて寝られないくらい感謝します。

### パスポート or 運転免許証 or 身分証明書
パスポートか免許証の画像を本人確認として要求されるのですが、
両方持ってない場合は、政府発行の身分証明書の画像を送る必要があります。

:::note warn
パスポートや免許証は日本語のままで良い場合があるようですが、
自分の場合は、「運転免許証を英語に翻訳してくれ」という要求があり、
どこを翻訳すればいいのかわからず、全部翻訳してみたら・・・大変でした・・・。
パスポートなら、翻訳を要求されないのかもしれません。
:::

また必須ではないようですが、（税金の処理の為）マイナンバーを入力することになるので、
若干の覚悟が必要な気がします。

### 登録完了
入力を済ませ、メールに本人確認用の画像を返信した後、数日以内にストアページの編集が可能になっていると思います。
初めてのゲーム登録の場合、登録料を支払ってから、30日後が、最短のゲーム公開可能日になります。


## 0.3. ストアページを準備
この項目も引き続きという形で、下記ページを参照するのが良いと思います。

https://indiegamesjapan.com/archives/2021/04/132/

https://tsukinowa.hatenablog.jp/entry/2018/07/29/224228

### ゲーム情報入力
最低限の入力項目がとても多いので、__頑張る！__

### 画像用意
カプセルと呼ばれる、ゲーム紹介のバナーとして使われる画像などを、
いろんなサイズで用意する必要があり、これが結構大変なので、__頑張る！__

### 準備ができたら
ストアページのレビューを受けます。審査には数日かかります。

:::note warn
問題があると、Steamworks上の通知とメールで、お知らせが来ます。
ゲームの内容がユーザーに伝わりやすいか、などが審査されるようです。
:::

特に問題が無ければ、ストアを公開するタイミングを自分で決められるようになります。
ストア公開の2週間後が、最短のゲームリリース可能日になります。



# 公式ドキュメントの問題点
[Unreal Engine 公式ドキュメント 「Online Subsystem Steam」](https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/Online/Steam/)

https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/Online/Steam/

SteamSDKをアップデートする際、
こちらのドキュメントが、混乱をまねく状態がだいぶ放置されているので、
問題点を羅列します。

## OnlineSubsystemSteamPrivatePCH.h
:::note alert
存在しないファイルを編集するように指示。
:::
![Qiita_42.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/ee7228c4-606c-d1fc-33e2-91e0f565c20c.jpeg)


このドキュメントは、__4.22__の時に更新されたはずですが、
__OnlineSubsystemSteamPrivatePCH.h__
このファイルは、__4.14__の中にはありましたが、__4.15__以降のファイルには存在しません。
__4.15__以降には、代わりに、__OnlineSubsystemSteamPrivate.h__　があり、
これを書き換えるべきかに関しては、情報が錯綜しており、この項目は無視するという意見が多いように思います。
無視するパターンと、__OnlineSubsystemSteamPrivate.h__の中身を書き換えるパターンと試しましたが、どちらでも動いたので、無視するのが正解かもしれません。
「__4.14__以前のバージョンの場合」と注意書きすべきです。

__混乱の元になるので、ドキュメントの修正を行って欲しいです。__

## steamclient.dll
:::note warn
ファイルが見つけにくい。
:::
![Qiita_43.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/906226/80f51e0a-6a53-2d69-e7c6-e6fa54a486b2.jpeg)

これに関しては、ギープさんの記事に助けられました。

https://qiita.com/kfgeap/items/98db96c6f34f866f777f

> steam_apiとsteam_api64は先ほど配置したsdkの中のredistributable_binディレクトリの中にある。
> それ以外のDLLはSteamクライアントディレクトリの中にある（C:\Program Files (x86)\Steam）。
> 全てコピーしてきて配置する。

Steamクライアントディレクトリー（C:\Program Files (x86)\Steam）がどこかわからず困った。

## Steam実績が機能しない
前述の不明瞭な点を克服すると、SteamSDKの更新が行え、Steam上でゲームがプレイできるようになるのですが、
スタンドアローン上で機能しているSteam実績が、アップロード後に機能しない現象に悩まされました。

公式のドキュメントに書いてある内容だけだと、Steam実績を動かすための更新設定が足りていないようです。

更新したSDKのバージョンが良くなかったのかと思いましたが、
検証を繰り返すうちに、SDKのバージョンの所為ではなく、
更新に必要な工程が抜けているようだという見解（個人的）に今はなっています。

同じような現象を下記ツールで、解消できた（4.10）というのを

https://forums.unrealengine.com/t/steam-setup-utility/28064

AnswerHubで見たので、

https://answers.unrealengine.com/questions/376954/view.html

差分検証してみようかと思っていますが、まだ検証できていません。

紙パレットさんの「ジラフとアンニカ」に実績が機能していたので、

https://www.giraffeandannika.com/

お話を伺ったところ、こちらのプラグインで機能しているということでした。
教えていただきありがとうございます！

https://www.unrealengine.com/marketplace/ja/product/subsystemconfigurator?lang=ja&sessionInvalidated=true

が、自分の環境では、状況が改善されませんでした。orz

## SteamSDKバージョン
以上のことを経験し、alwei先生に泣きつき。。。すみません。
記事を書いてもらえ。神様！
お忙しい中、本当にありがとうございましたm(_ _)m

https://unrealengine.hatenablog.com/entry/2021/07/24/204236

この記事で、自分が救われた点が、SteamSDK更新しなくていいんじゃね？
という点で。

現在　SteamSDK の最新版は、1.53a ですが、
Unreal Engine にデフォルトで指定してある SteamSDK のバージョンは、

| Unreal Engine | SteamSDK |
|:-:|:-:|
| 4.22 | 1.39 |
| 4.23 | 1.42 |
| 4.24 | 1.46 |
| 4.25 | 1.47 |
| 4.26 | 1.47 |
| 4.27  | 1.51 |
| 5.00EA | 1.47 |

現時点で、
4.22を1.39でアップロードしても問題なく動き
4.23を1.42でアップロードしても問題なく動きます。
セキュリティ的に上げたいという場合もあるかと思いますが、
SteamSDKを更新しないという判断も、ありだと思います。

そして何より、SDKを更新しなければ、実績がちゃんと機能した！
という事を、伝えたいという思いだけで、この記事を書いたようなものです。

Steamworksのページなどに、最新版を使うようにと書かれていたり、
Epicのドキュメントの最初に、SDKの更新方法が載っていたりと、
更新する必要があると思い込んでいましたが、更新しなくていいと思います。

願わくば、ちゃんとしたSDK更新方法が共有されるのがベストですね。


# 参考リンク

- [STEAM WORKS](https://partner.steamgames.com/)
 - [Steamworks ドキュメンテーション](https://partner.steamgames.com/doc/home)
 - [Steamworks Development SteamworksDev](https://steamcommunity.com/groups/steamworks)
- [UNREAL ENGINE](https://www.unrealengine.com/)
 - [Unreal Engine 4 Documentation](https://docs.unrealengine.com/)
      - [Online Subsystem Steam](https://docs.unrealengine.com/4.27/ja/ProgrammingAndScripting/Online/Steam/)
 - [FORUMS](https://forums.unrealengine.com/)
      - [FORUMS Steam](https://forums.unrealengine.com/search?q=steam)
 - [UE4 ANSWERHUB](https://answers.unrealengine.com/)
     - [UE4 ANSWERHUB Steam](https://answers.unrealengine.com/search.html?q=steam&c=&type=question+OR+idea&lang=en&sort=relevance&author=&productVer=default&questionStatus=all)
- 参考リンク
 - [またろうのSteamworksブログ](https://tsukinowa.hatenablog.jp/)
 - [indiegamesjapan Steamworks](https://indiegamesjapan.com/?s=steamworks)
 - [(:3[kanのメモ帳] Steam](https://kan-kikuchi.hatenablog.com/archive/category/Steam)
 - [UE4 ShippingでSteamworksを利用できるようにする Let's Enjoy Unreal Engine](https://unrealengine.hatenablog.com/entry/2021/07/24/204236)
 - [Steamストアページを作る際に参考にした資料・記事はこちら-Twitter](https://twitter.com/pafuhana1213/status/1431216526518931460?s=20)
 - [UE4にSteamworksSDKを導入（未解決）Qiita](https://qiita.com/kfgeap/items/98db96c6f34f866f777f)
 - [UE4 パッケージ化設定のポイントを押さえる【初心者向け】Windows](https://qiita.com/O_Y_G/items/8bc60efe54f9aefafd38)





#おわりに
Steamでゲームを公開するというのが、まだまだ先の予定でしたが、
[__RRRさん__](https://store.steampowered.com/app/1339330/Samurai_Cooking/) や [__HueHumanさん__](https://store.steampowered.com/app/1385210/_/) が個人でリリースしているのを見て、案外簡単かも！と血迷った判断をして大変な思いをしました・・・。

__Steamにリリースしている方全員を尊敬します。__

Steam登録の際には、[__またろうさんのブログ__](https://tsukinowa.hatenablog.jp/entry/2018/01/22/233059) に助けられ、
Steam更新の手順では、[__ギープさんの記事__](https://qiita.com/kfgeap/items/98db96c6f34f866f777f)に助けられ、
Steam実績がなぜか動かなかった時は、[__紙パレットさん__](https://twitter.com/kamipallet)　[__alweiさん__](https://twitter.com/aizen76)　[__shiotaniさん__](https://twitter.com/YuyaShiotani)に助言いただき、
Steamクラウド、ベータ版の作り方は、[__カンさんのブログ__](https://kan-kikuchi.hatenablog.com/entry/Steam_Cloud_Save) に助けられました。
記事をまとめている時に、[__indiegamesjapanさん__](https://indiegamesjapan.com/?s=steamworks)にも丁寧な情報が上がっていたのをみつけたので、参考にさせていただきました。
重ね重ね感謝致します！！


この記事で、Steamにゲームがリリース出来た人が一人でもいたらいいなと思います。

https://twitter.com/O_Y_G/status/1472036394453377028?s=20