😎

[2025年版] Steam にアップロードする(前編)

に公開

Unity でビルドした実行環境を Steam 対応するために行った作業を紹介します。
なお、組織やゲームタイトルを SteamWorks に登録する方法は、今回は紹介しません。


この状態からスタートだと思ってください

この記事では、以下の内容について順を追って説明します。

  • Unity プロジェクトに SDK を導入(前編)
  • 実行環境(exe)を Steam クラウドにアップロード(中編)
  • Steam ライブラリからゲームプレイ(中編)
  • 番外編:ローンチ後、開発途中のロムを Steam に登録する(後編)
  • Steam で上手くいかない場合(後編)

Unity プロジェクトに SDK を導入

Unity では Steam 公式で使えるライブラリの提供はありません。
有志で公式レベルのライブラリ SteamWorks.NET を使います。

◆ SteamWorks.NET をインポート

Unity の PackageManager > + > Install package from git URL… を選択し、以下の URL からパッケージを登録します。

https://github.com/rlabrecque/Steamworks.NET.git?path=/com.rlabrecque.steamworks.net#20.2.0

◆ SteamManager.cs をプロジェクトに追加

https://github.com/rlabrecque/Steamworks.NET-SteamManager/blob/master/SteamManager.cs

先ほど SteamWorks.NET をインポートしたプロジェクトに、こちらのコンポーネントクラスを含めてください。
次にヒエラルキーにルートオブジェクト(SteamManager)を1つ作り、SteamManager.cs をアタッチします。

このオブジェクトは自動的に DontDestroyOnLoad に移動し、ゲーム終了まで Steam との通信を続けます。そもそもシーンが1つしかないなど DontDestroyOnLoad が不要の場合、以下の行はコメントにしてもいいかもしれません。

// We want our SteamManager Instance to persist across scenes.
DontDestroyOnLoad(gameObject);

▼ (閑話休題)何をするクラスなのか

このコンポーネントは Steam ライブラリの初期化、起動、監視、終了を司ります。

重要な特徴としては、このクラスを導入するとゲームが必ず購入者がログインした Steam から起動します。
このお陰で「Steam からインストールしたゲームが無料でコピーし放題!」を防ぐことができます。

SteamAPI.RestartAppIfNecessary(AppId_t.Invalid)

AppId_t.Invalid を自分が登録したゲームの AppID にしてください。

AppID が 999999 の場合、コードは次のようにします。

SteamAPI.RestartAppIfNecessary((AppId_t)999999)

▼ クラス内にある Update() について

この中で一定時間ごとにコールする必要のある SteamAPI.RunCallbacks() が呼ばれていますが、TimeScale = 0 にしてしまうと Update が呼ばれなくなってしまうので、コルーチンにするという手もあります。必要に応じて変更してください。

    protected virtual IEnumerator Start()
    {
        if (!m_bInitialized)
        {
            yield break;
        }

        while (true)
        {
            // Run Steam client callbacks
            SteamAPI.RunCallbacks();

            yield return null;
        }
    }

▼ steam_appid.txt

Assets/ と同じ位置に、steam_appid.txt を含めます。
このテキストの中には先ほど入れた AppID と同じ数字(例では 999999)を入れておいてください。

▼ ビルド

上記の状態でゲームを実行し、問題がないようであればビルドしておいてください。
ビルドで注意点(Project Settings > Player の設定項目)をいくつかあげておきます。

  • IL2CPP ビルドにしておくこと
    Mono だと簡単にゲームロムをハックされます!
  • Use Player Log はオフにしておく
    デバッグ中はオンでも構いませんが、リリース時は必ずオフにしましょう。
    なお、Player Log は C:/Users/[UserName]/AppData/LocalLow/[会社名]/[ゲーム名]/Player.log として出力されています(Debug.Log も確認できます)
  • Build Profiles > Platform Settings > Development Build はオフ
    オンにしていると右下に「Development Build」と表示されるので気づくと思いますが、
    リリース時は必ずオフにしましょう。

◆ SteamWorksSDK をダウンロード

SteamWorks ダッシュボードの右側に次のような項目があります。

紛らわしいのですが、こちらはビルド環境を Steam クラウドにアップロードするために必要な SDK です。Unity には含めません。
ゲーム開発環境とは別の、わかりやすいフォルダに置いておくといいでしょう。

エクスプローラーの表示を参考に、sdk/tools/ContentBuilder/run_build.bat を実行しましょう。
私の環境では sdk/tools/ContentBuilder/builder/ がこのようになりました。

後ほど、この中の steamcmd.exe を使ってビルド環境をアップします。

[2025年版] Steam にアップロードする(中編)に続きます。

Discussion