UnityでのSteam実績を実装する方法です。
Unity側とSteamworks側でそれぞれ設定を行っていきます。
Steamworks
まずはSteamworks側の設定から行います。
Steamworksの対象ゲームのページにアクセスします。

実績データ作成

実績の詳細を設定していきます。
まずは以下の項目のみ入力して、画像をアップロードせずに保存します。

API名 | 実績キー名を入力 |
ディスプレイ名 | 実績のタイトルを入力 |
説明 | 実績の説明を入力 |
非表示? | 隠し実績にする場合はチェック |

「画像を登録する前に実績の項目を作ってね」というエラーが発生します。
このエラーが発生したら一旦画像無しで実績データのみ保存し、再度編集で画像をアップロードして登録します。
実績用画像アップロード
一度実績データを作成してから画像を登録していきます。
「達成アイコン」と「未達成アイコン」の2種類の画像を登録します。

「達成アイコン」をグレースケールにした画像が「未達成アイコン」になっていることが多いです。


実績のローカライズ
ここからSteam実績のローカライズ対応をしていきます。
実績のローカライズ対応をしたい言語を選択します。

実績設定の画面に戻ると「Select a language」というドロップダウンがあるので、それぞれの言語に対応した実績を保存すれば完了です。



これでSteamworks側のSteam実績の設定は完了です!
Unity
次にUnity側での設定を行います。
Steamworks.NETインポート
最初にSteamworks.NETパッケージをインポートしていきます。
Releases · rlabrecque/Steamworks.NET
Steamworks wrapper for Unity / C#. Contribute to rlabrecque/Steamworks.NET development by creating an account on GitHub.
上記のサイトからパッケージをダウンロード、もしくはGit経由でUnityにインポートしていきます。
実績解除の実装
Steam実績解除の一通りの流れを簡潔にまとめてみました。
using Steamworks;
public class SteamAchievementUpdate
{
private void UpdateAchievement()
{
string apiName = "Steamworksで設定したAPI名";
//SteamAPI初期化(必須)
if (SteamManager.Initialized)
{
if (SteamUserStats.RequestCurrentStats())
{
//対象の実績状態をチェック
SteamUserStats.GetAchievement(apiName, out bool isUnlocked);
//実績がロックされていれば更新対象
if (!isUnlocked)
{
SteamUserStats.SetAchievement(apiName);
}
//実績解除
SteamUserStats.StoreStats();
}
}
}
}
実績解除のタイミングで上記コードを実行すればOKです。
最後にSteamworksにゲームビルドをアップロードして更新すればSteam実績の実装は完了です!