(:3[kanのメモ帳]

個人ゲーム開発者kan.kikuchiのメモ的技術ブログ。月木更新でUnity関連がメイン。

(:3[kanのメモ帳]



Unityで開発しているSteam向けゲームのDLCの設定と実装方法【Unity】【Steam】


このエントリーをはてなブックマークに追加


この記事でのバージョン
Unity 2019.4.1f1


はじめに

今回はUnityで開発しているSteam向けゲームのDLCの設定と実装方法です!


ただし、「DLCのビルドは別で購入したら追加でダウンロードする」という方式ではなく、

「DLCの内容も本体に含まれていて、購入したかのフラグを取得して開放する」

という感じなのであしからず。


なお、DLCに関するSteamの公式ドキュメントは以下のページになります。





Steamworks上でのDLCの設定

まずSteamworks上でのDLCの設定からです。


新しいDLCの追加はゲーム本体の「関連する全てのパーセンテージ、DLC、体験版、ツール」

f:id:kan_kikuchi:20200803065004j:plain


「新しいDLCを追加」から行えます。

f:id:kan_kikuchi:20200803065757j:plain


DLCのタイトルを設定し、Continueボタンを押したら

f:id:kan_kikuchi:20200803065835j:plain


アプリ一覧の所にタイプDLCという形で表示されるようになります。

f:id:kan_kikuchi:20200803065849j:plain


後はゲームと同様に指定された設定や素材追加をしていくだけです。

ちなみに、ビルド設定の場所もありますが、DLCのビルドがない場合は設定しなくて大丈夫です。

f:id:kan_kikuchi:20200803065916j:plain


余談ですが、ゲーム本体のスクショにDLCの内容を含めるとリジェクトになるので注意が必要です。


Steamworks.NETの導入

実装の前にSteamworks.NETをプロジェクトに導入するのですが、これをそのまま入れるより



Steamworks.NET-Exampleというサンプル付きのものを導入した方が色々便利です。



なお上記のGitHubからプロジェクトを取得したら、

f:id:kan_kikuchi:20200706064531j:plain


Assets以下を自分のプロジェクトへコピーするだけで導入は完了です。

f:id:kan_kikuchi:20191012075612j:plain



DLCの実装

最後にDLCがインストール(購入)されているかの判定実装です。


まず判定の前にSteamManager.Initializedを参照して初期化を行います。

なお、Steamを起動していない場合等はfalseになり初期化失敗です。

//SteamManager等を使うのに必要
using Steamworks;
//初期化
if (!SteamManager.Initialized) {
 Debug.LogWarning("SteamManagerの初期化に失敗しました");
  return;
}


そして本題のインストールされているかの判定ですが、

SteamApps.BIsDlcInstalledにDLCのIDを渡して作成したAppidを渡すだけ。

(ビルドがなく、インストールする物がないタイプのDLCでもこれでOK)

//DLCがインストールされているか
bool isDlcInstalled = SteamApps.BIsDlcInstalled(new AppId_t(1386430));


なお、各DLCのIDはSteamworks上で確認出来ます。

f:id:kan_kikuchi:20200803071613j:plain


また、DLCの(アン)インストールもSteamAppsを使って行う事が出来ます。

//DLCのインストール
SteamApps.InstallDLC(new AppId_t(1373150));

//DLCのアンインストール
SteamApps.UninstallDLC(new AppId_t(1373150));


ちなみに、DLCをゲーム内から直接購入する事は出来ないみたいですが、

SteamFriends.ActivateGameOverlayToStoreを使う事でSteamの購入画面を開く事は出来ます。

//SteamのDLCの購入画面を開く
SteamFriends.ActivateGameOverlayToStore(new AppId_t(1373150), EOverlayToStoreFlag.k_EOverlayToStoreFlag_None);


IDをゲーム本体の物にすれば、DLCでなくゲーム本体のページを開けますし、

第2引数をk_EOverlayToStoreFlag_AddToCartにすればカートに追加

k_EOverlayToStoreFlag_AddToCartAndShowにすれば

カートに追加して、ストアページを表示する事も可能です。