前書き
Steamの実績を実装する方法はいろいろなサイトに載っているのですが、今後も同様の作業をすると思うので自分なりにかみ砕いてSteamの実績を導入する方法を残しておこうと思います。
今回は前回設定したSteamworksの実績をソースコードに実装する形になります。まだSteamworksで実績を設定していない人は以下に設定方法を記載しているので参考にご確認ください。
また、Steamの実績導入のために参考にしたのは以下のサイトになります。
大まかに作業する工程
UnityでSteamの実績を実装する工程としては簡単に以下3つになります。
- Steamworks.NETをUnityに導入する(個人的にここが一番の詰まりました)
- Steamworksで実績の設定を行う
- 2.で設定した実績を読み込むための実装をする
今回は「3.設定した実績を読み込むための実装をする」について説明をしようと思います。こちらについては「1.Steamworks.NETをUnityに導入する」でサンプルソースも合わせて導入しているため、サンプルソースを基準に説明していきたいと思います。Steamworks.NETをUnityに導入するためのサンプルソースが分からない方は第1回に記載しておりますのでこちらをご確認の上で実装していただくと分かりやすいかなと思います。
実績を実装するための必要な要素
では早速、Steamの実績方法をサンプルプロジェクトから見ていきましょう。サンプルプロジェクトのHierarchyを見てみると「StatsAndAchievements」と「SteamManager」がありますがこれがSteamの実績を実装するオブジェクトになっています。
StatsAndAchievementsオブジェクトには「SteamStatsAndAchievements」スクリプト
SteamManagerオブジェクトには「SteamManager」スクリプトが設定されています。それぞれ実績を解除するための必要となる処理が設定されているため実装を見てみましょう
SteamManagerについて
SteamManagerの処理を一部抜粋しますがSteamManagerで行っている主なことはSteamAPIとの接続になります。上記SteamAPI.Init()の処理でSteamとの接続を行っています。
SteamAPIとの接続について
実績の解除を行う場合はSteamとの接続確認が必須になっています。そのため「Steamを起動していない場合はエラー」になるため、実績の解除の動作確認を行いたい場合は必ずSteamを起動する必要があります。動作確認をしたい場合はSteamの起動をしておきましょう。
また、サンプルソースでは誰でも動かせるようにサンプル用のAppIDなどが設定されていますが、自分のゲームで動かしたい場合は個別に設定する必要があります。
Steamの実績解除の動作確認をするためには「steam_appid.txtに自分のAppIdを記入して格納する」必要があります。以下はSteamAPIとの接続で使用する「SteamAPI_Init」の説明になります。
steam_appid.txtに記載する「AppIDは以下の赤四角の部分」になります。
Unityの実行で動かしたい場合は「.exeが置いてある階層にsteam_appid.txtを配置する」必要があります。
実行ファイルで動かしたい場合は「.exeが置いてある階層にsteam_appid.txtを配置する」必要があります。
動かしたい場所によってsteam_appid.txtの格納場所が違うため、それぞれ格納しておきましょう。
ソースの修正について
基本的にSteamManagerは修正不要でそのまま使用することができます。ただし、SteamAPIと接続するには個別にAppIDを設定する必要があるので忘れずにsteam_appid.txtを適切な場所に配置しましょう。
上記準備を行えば問題なくSteamAPIとの接続ができると思います。
SteamStatsAndAchievementsについて
こちらのソースについては「どの実績を解除するのか?」といった内容を実装する必要があります。どの実績を解除するかはSteamworksで実績を設定した時に「API名」を設定しましたが、そのときのAPI名が必要になってきます。
実績の解除方法(データの場合)
上記はSteamStatsAndAchievements.csの実績解除部分になります。ここで記載している”SteamUserStats.SetStatは“、「データで設定された実績の解除方法」になります。実績の進捗状況を”m_nTotalGamesPlyaed“などのint型/float型で設定することで進捗状況を設定するという意味になっています。
実績の解除方法(実績の場合)
データを用いない実績解除の方法は”SteamUserStats.SetAchievement“になります。引数として”API名“のみなので、SteamUserStats.SetAchievementを実行することで実績が解除される形になります。
実績の解除の反映
“SteamUserStats.SetStat“や”SteamUserStats.SetAchievement“を実行してもまだサーバに解除された情報が送信されていません。実績解除の情報をサーバに送るためには”SteamUserStats.StoreStats“を実行する必要があります。
実績を解除する方法としては上記3つの機能を使えば実績を解除することができます。サンプルソースを見るとほかにもいろいろなSteamAPIを用いて実装をしていますが、気になる方は以下にSteamAPIのドキュメントがあるので確認してみてください。
実績の実装を簡単に言うと
- SteamAPIと接続する
→SteamManager.csで実装されているため、コーディング不要。
ただし、「Steamを起動する」、「steam_appidを格納する」っと言ったことが必要 - 実績解除を実装する
→”SteamUserStats.SetStat“や”SteamUserStats.SetAchievement“を使用して実績の解除を行う。そのときはSteamworksで設定したAPI名が必要になるため、設定したAPI名と同じものを実装する。 - 実績解除の情報をサーバに送る
→”SteamUserStats.SetStat”や”SteamUserStats.SetAchievement”を実行した後、忘れずにSteamUserStats.StoreStatsを実装する。
上記3つを行うことで実績解除を実現することができます。
まとめ
今回はSteamの実績解除を実装するについて紹介しました。
第1回から第3回までに渡ってSteamの実績について紹介しましたが、思ったよりも簡単に出来るのかなと思います。とはいえ、「どういった実績を考えるのか?」、「どういった場合に実績を解除するのか?」など、どのような実績を作るのかがゲームの面白さに繋がってくるので今回紹介した内容としては実績のほんの入り口に過ぎないかなと思います。
実績コンプなどもありますのでゲームの面白さを増やすためにもSteamでゲームをリリースする際は実績も実装してみてはいかがでしょうか?
コメント