またろうのSteamworksブログ

Steamworks(Steam Direct)についての開発ネタを纏めています。

Steamworks APIを導入する(Steam実績を実装する:Unity編)



今回はUnityにSteamworks APIを導入する手順を書きます。

f:id:tsukinowaapp:20180807173441p:plain

事前作業

開発環境にもSteamクライアントをインストールして
Steamworks管理者アカウントか、「アプリのメタデータの編集」権限の付与されたアカウントを設定しておいてください。
(これをやってないとAPIの呼び出しができません)

Steamworks.NETのセットアップ

Unityの場合はSteamworks.NETを使います。
Steamworks.NETはアセットストアにもあったりしますが、
下記からunitypackageをダウンロードして
「Assets」→「Import Package」→「Custom Package」で導入した方が面倒がないです。

github.com

インポートしたらプロジェクトフォルダ直下にsteam_appid.txtを設置します。
ファイルの中にはAppID(数字)のみを記述します。

SteamManagerの導入

実はこれだけでは足りなくて、Steamworks.NET-ExampleからSteamManager.csを持ってくる必要があります。
(SteamStatsAndAchievements.csもあると便利です)

github.com

これをzipで入手・解凍したら上記csソースをプロジェクト内の分かりやすい場所に置きます。

コーディング

下記をusingに追加しておいてください。

using Steamworks;

プレイヤー名の取得

if (SteamManager.Initialized)
{
    playerName = SteamFriends.GetPersonaName();
    //Debug.Log(playerName);
}

APIを叩く前にSteamManager.Initializedを呼び出して初期化します。
正しく初期化されたらtrueが返りますので、それを拾って後続処理を行うよう記述します。
以下のソースも同様です。

Statsの呼び出し

SteamUserStats.GetStat("xp", out m_xp);

第一引数はStatsのAPI名です。
(Web側で設定した名称です)
第二引数にoutで値を設定します。

Statsの書き込み

SteamUserStats.SetStat("xp", m_xp);
bool bSuccess = SteamUserStats.StoreStats();

第一引数はStatsのAPI名です。
第二引数で書き込みたい値を設定します。
SteamUserStats.StoreStats();で実際に値を書き込む処理を行い、
成功したらtrueが返ってきます。

実績の獲得

if (m_nTotalNumWins >= 100) {
    SteamUserStats.SetAchievement("Winner");
}

実績の獲得条件が成立したら、SetAchievementを呼び出します。
引数に実績のAPI名を記述します。

SteamStatsAndAchievementsについて

SteamStatsAndAchievementsでは各処理を一纏めにして置いてあり、大変参考になります。
実績もenumを使って配列化されています。
これを改造して、インスタンス化して使うのが楽かと思います。