やりたいこと
Steamの実績(Achievement)の実装します。
前提
SteamWorksで作成しているアプリのAppIDを取得するところ(アプリの設定ページが表示されている、ストアページが公開されている必要はないです)まで終わっていることを前提にしています。
作業
Steamworks.NETのインストール
以下のページからSteamworks.NETをダウンロードします。この記事を書いた時点ではRelease 2025.162.1が最新でした。
ダウンロードするのはAssetsの中の.unitypackageです。

UnityEditorのメニューからAssets → ”Import Package” → “Custom Package..”を選択します。

ファイルの選択ダイアログが表示されるので、ダウンロードした.unitypackageを選択します。
しばらく待つとインポートファイル選択ダイアログが表示されるのでImportをクリックします。
Assetsフォルダに以下の2つが追加されます。

Steamworks.NETはMITライセンスです。EULAに注意してください。
Steamworks.NET-ExampleはRelease 2025.162.1との組み合わせで動作しませんでした。
(修正すれば動作するのですがここで悩むこともないと思います)
AppIDの設定
開発向け
steam_appid.txtの名前でテキストファイルを作成します。
ファイルの中身はAppIDのみを記載して保存します。
AppIDは以下に表示されている数字です。

作成したsteam_appid.txtはUnityのプロジェクトのルート(*.slnのあるフォルダ)に置きます。
steam_appid.txtを置いたら(もしくは更新したら)Editorを再起動します。
Editorからではなくビルド後に使用する場合はビルドしたexeファイルのフォルダに上記のファイルを置きます。
製品向け
製品向けにはsteam_appid.txtを削除します。
Assets\Scripts\Steamworks.NET¥SteamManager.csを開きます。
以下の行の”AppId_t.Invalid”を”(AppId_t)AppID”に置き換えます。例:(AppId_t)480
if (SteamAPI.RestartAppIfNecessary(AppId_t.Invalid)) {SteamWorksでの設定
対象のアプリのページを開き実績ページを開きます。

新しい実績をクリックして設定します。(達成アイコン、未達成アイコンは初回は設定できません。いったん保存してから設定します。)
ここで紹介するのは値を使用しない実績です。
API 名: アプリから指定するID。ユニークである必要がります。
進行状況: なしに設定
ディスプレイ名: ユーザに表示される実績名
説明: ユーザに表示される実績の説明
非表示?: 未達成の時にユーザに表示するかどうか
必要なアチーブメントを追加したら公開タブに移動し、”公開の準備”、”Steamに公開”をクリックします。

実装
実績の解除は以下のコードで行います。ACHIEVEMENT_IDはSteamWorksで設定したAPI名に変更します。
if (SteamManager.Initialized) {
SteamUserStats.SetAchievement("ACHIEVEMENT_ID");
SteamUserStats.StoreStats();
}以上で実績解除の実装が行えました。
SteamManager.Initializedを呼ぶのは必須です。
わかりにくいのですがSteamManager.Initializedはただ初期化をされているか確認しているのではなく、インスタンスの嗄声も行っています。
おまけ
起動したアプリのAppIDの確認
steam_appid.txtなどで設定したAppIDがちゃんと効いているか確認します。
Steamを右クリックしてコンソールを起動します。

対象のアプリを起動します。
以下のようなログが記録されると思うのでAppIDが確認できます。
ちなみにAppID 480は試験用のIDなので正しくせってできていないということです。
Game process updated : AppID 480 ""C:\Program Files\Unity\Hub\Editor\2021.3.44f1\Editor\Unity.exe"・・・・・
参考にさせていただいたサイト




コメント