この記事でのバージョン
Unity 2019.4.26f1
はじめに
今回はUnityで開発しているSteam向けゲームで他のゲームを所有(購入)しているか、
ライブラリにあるか(インストールしているか)を判定する方法です!
なお、これを使うことにより過去作やデモ版をプレイしたユーザに特典を付与する事が可能です。
ちなみに「前作のデータから追加データを得る機能」の特許は期限がきれているそうです。
“2014年の段階で出願から20年が経過しており、特許の期限が切れている”
— カン@ゲームクリエイター(Unity/VR/Switch/Steam) (@Kan_Kikuchi) 2021年5月19日
なるほど、次回作で何か実装してみようかしら🤔
コーエーテクモゲームスとカプコンの特許侵害訴訟は最高裁判断へ。2014年から続く「前作のデータから追加データを得る機能」を巡る裁判 https://t.co/tG20QQMjJ2
Steamworks.NETの導入
まずプロジェクトにSteamworks.NETを導入するのですが、これをそのまま入れるより
Steamworks.NET-Exampleというサンプル付きのものを導入した方が色々便利です。
なお上記のGitHubからプロジェクトを取得したら、
Assets以下を自分のプロジェクトへコピーするだけで導入は完了です。
特定のゲームを所有(購入)しているかの判定方法
特定のゲームを所有(購入)しているかを判定するにはSteamAppsのBIsSubscribedAppを使います。
//App Id 1549790(SLASH OF BULLET)のゲームを所有しているか bool isSubscribedAp = SteamApps.BIsSubscribedApp(new AppId_t(1549790));
なおApp IdはSteamWorks等で確認する事が出来ます。
ちなみにドキュメントには以下のようにあるので、
他社のゲームの所有のチェックには使わない方が良さそうです。
アクティブなユーザーが指定のAppIDをサブスクライブしているかをチェックします。
例えば体験版など、あなたのゲームに関連する別のゲームの所有についてチェックが必要な場合に限って使用してください。
ライブラリにあるか(インストールしているか)の判定方法
ライブラリにあるか(インストールしているか)の判定するにはSteamAppsのBIsAppInstalledを使います。
//App Id 1549790(SLASH OF BULLET)のゲームがライブラリにあるか bool isAppInstalled = SteamApps.BIsAppInstalled(new AppId_t(1559790));
なおドキュメントには以下のようにあり、
ライブラリにはあっても所有はしてない場合もある点には注意が必要です。
指定のアプリがインストールされているかを確認します。
無料ウィークエンドなどを利用したことで、ユーザーが現時点でアプリを所有していない場合があります。
ダウンロードコンテンツ (DLC)ではなく、これはベースアプリケーションでのみ機能します。 DLCには、代わりにBIsDlcInstalledを使用します。
ISteamApps インターフェイス (Steamworks ドキュメント)
ちなみにDLCのインストール判定や実装については以下の記事を参照の事。