(:3[kanのメモ帳]

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

(:3[kanのメモ帳]


本ブログの運営者kan.kikuchiが個人で開発したゲームです!

    

Steamの実績をUnityで実装する【Unity】【Steam】


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


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


はじめに

今回はUnityで作ったゲームに、Steamの実績を実装する方法の解説です!

f:id:kan_kikuchi:20191012091400g:plain


ちなみにVRゲームでも全く同じ方法で実装可能です。

なお、Steamworksへの登録が済んでいる前提ですので、あしからず。


Steam(ブラウザ)上での設定

まずはSteam(ブラウザ)上での設定について解説していきます。

データ設定

Steamはゲーム内のデータを記録する事ができます。

そして「起動回数というデータを記録し、起動回数が10回になったら実績解除」

という具合に、データを使って実績を自動で解除する事も可能です。

もちろんデータを記録せずにいきなり実績を解除する事も可能です。


そのデータは「テクニカルツール」「Steamworks 設定を編集」にある

f:id:kan_kikuchi:20191013161607j:plain


「データ&実績」「データ」から設定する事が出来ます。

f:id:kan_kikuchi:20191013161621j:plain


例えば起動回数のデータを設定してみると以下のような感じ。

f:id:kan_kikuchi:20191016051955j:plain


なお、各項目の意味は以下の通りです。

  • タイプ : データの型の指定
    • INT : 整数型
    • FLOAT : 浮動小数点型
    • AVGRATE : 移動平均型
  • API名 : プログラムからデータを設定、ロードする時に使うキー
  • 設定 : データの操作が出来る対象
    • Client :ゲームアプリから直接操作
    • GS :独自のサーバーからデータを操作
    • Offical GS:Steamのサーバーからデータを操作
  • 増分のみ? : 数が減らないデータの時はチェック
  • 最大変化 : 一度に増えるデータの最大値
  • 最小値 : データの最小値
  • 最大値 : データの最大値
  • デフォルト値 : データの初期値
  • 集計 : リーダーボード(ランキング)で使う場合はチェック
  • ディスプレイ名 : データの名前



実績設定

実績は「データ&実績」「実績」から設定する事が出来ます。

f:id:kan_kikuchi:20191013172948j:plain


例えば起動回数が10回越えた時の実績を設定してみると以下のような感じ。

f:id:kan_kikuchi:20191013173037j:plain


なお、各項目の意味は以下の通りです。

  • API名 : プログラムからデータを設定、ロードする時に使うキー
  • 進行状況 : 実績解除の対象となるデータ
  • ディスプレイ名 : 実績の名前
  • 説明 : 実績の説明
  • 設定 : 実績の操作が出来る対象
    • Client :ゲームアプリから直接操作
    • GS :独自のサーバーからデータを操作
    • Offical GS:Steamのサーバーからデータを操作
  • 非表示? : 獲得するまで隠しておきたい場合はチェック
  • 達成アイコン : 実績達成後のアイコン(カラー推奨)
  • 未達成アイコン : 実績達成前のアイコン(白黒推奨)



------------追記------------

ローカライズ時に使える便利スクリプトも作りました!



------------追記おわり------------


Steamworks.NETの導入

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



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



上記のGitHubからプロジェクトを取得したら、Assets以下を自分のプロジェクトへコピーします。

f:id:kan_kikuchi:20191012075058j:plain
f:id:kan_kikuchi:20191012075612j:plain


この時、Steamworks.NET-Exampleなどのディレクトリにまとめて入れると後々分かりやすいです。

f:id:kan_kikuchi:20191012075618j:plain


デフォルトでサンプルのゲームが設定されているので、

この状態でMainSceneを実行し、ボタンを押すと、

実績が解除され、お馴染みの実績解除演出(?)が右上に表示されます。

(VRではVR上にポップアップが表示される)

f:id:kan_kikuchi:20191012090956j:plain
f:id:kan_kikuchi:20191012091400g:plain


なお、Steamを起動してないとエラーが出ます。

[Steamworks.NET] SteamAPI_Init() failed. Refer to Valve's documentation or the comment above this line for more information.

f:id:kan_kikuchi:20191012085325j:plain


自分のゲームを設定する時は

Assetsと同じ階層(Unityからは見えない所)にあるsteam_appid.txtにAppIDを設定し、

Unityを再起動します。(再起動しないと変更が反映されない)

f:id:kan_kikuchi:20191015112047j:plain


ここでいうAppIDとはSteamのゲームごとに設定されているIDの事です。

f:id:kan_kikuchi:20191013055301j:plain



実装

最後にデータや実績の操作をプログラムで実装する方法について、

重要な部分だけざっくりと解説していきます。


なお、実装にはusing Steamworks;が必要です。

初期化

まずはSteamManager.Initializedで初期化を行う必要があります。

なお、返り値が初期化が成功したかのbool値となっています。

//初期化
if (SteamManager.Initialized){
  //初期化が成功したらAppIDを表示(480はサンプルのID)
  Debug.Log($"Steamの初期化成功, AppID : {SteamUtils.GetAppID()}");
}
else {
  Debug.Log("Steamの初期化失敗");
}
f:id:kan_kikuchi:20191013055437j:plain


ちなみに、ユーザ名はSteamFriends.GetPersonaNameで取得可能です。


データ設定

データの設定にはSteamUserStats.SetStatとStoreStatsを使います。

//データの設定(apiがAPI名でstring、valueが設定するデータでintかfloat)
SteamUserStats.SetStat(api, value);
SteamUserStats.StoreStats();


StoreStatsを実行しないと送信がされない点には注意が必要です。


データ取得

データの取得にはSteamUserStats.GetStatを使います。

//データの取得(apiがAPI名でstring、valueが取得するデータでintかfloat)
SteamUserStats.GetStat(api, out value);


返り値で取得するのではなく、outの引数で取得する点には注意が必要です。


実績解除

実績を直接解除したい時はSteamUserStats.SetAchievementを使います。

//実績の解除(apiがAPI名でstring)
SteamUserStats.SetAchievement(api);


なお、進行状況で対象となるデータを設定してる場合は自動で実績が解除されるので、

この処理は必要ありません。


データと実績のリセット

データと実績のリセットにはSteamUserStats.ResetAllStatsとRequestCurrentStatsを使います。

//データと実績を全てリセットする
SteamUserStats.ResetAllStats(true);
SteamUserStats.RequestCurrentStats();



参考