Steamの実績システムをUnreal Engine 5で実装する方法を解説します。
Steamの実績システムを実装するためには、Steamworksでアプリケーション(ゲームソフト)のストアページを編集できる段階まで到達している必要があります。
- ストアページを編集できる段階まで到達したら、実績の設定は可能。
しかし、実績の動作確認はできません。 - 実績の動作確認は、ゲームをアップロードしてから可能になります。
ストアページを編集可能になった時点で出来ること
Steamworksで自分のアプリ番号を確認しておく
Steamworksで自分のアプリケーションの編集ページを開く。
アプリタイトルの横に7桁の数字があります。これがアプリ番号です。

Steamworksで実績の登録
Steamworksの アプリとパッケージ > すべてのアプリケーション を開く。
実績を追加したいアプリの Steamworks管理 をクリック。
データ & 実績 > 実績 をクリック。

新しい実績 をクリックすれば実績を追加できます。
- API名
Unreal Engineで呼び出す時の名前(半角英数字)。_(アンダーバー)は使用可能です。 - 進行状況
最小値と最大値を設定可能。シンプルな「未獲得」「獲得」を判別するだけなら、「最小値:0」「最大値:1」にします。
デフォルト値は最小値の0となり、Unreal Engine側でSteam実績システムを呼び出して値を1に書き換えると実績獲得となります。 - ディスプレイ名
プレイヤーに表示される実績名(英語)。 - 説明
その実績の簡単な説明(英語)。 - 設定
「クライアント」のままで構いません。 - 非表示?
実績獲得までディスプレイ名と説明を非表示にしたければチェックを入れる。実績を表示するとネタバレになってしまう場合などは非表示にすると良いでしょう。 - 達成アイコン
256×256 JPGのカラーアイコン。 - 未達成アイコン
達成アイコンを白黒にする。
Unreal EngineでOnline Subsystem Steamのインストール
Unreal Engineの自分のプロジェクトで、プラグイン「Online Subsystem Steam」をインストールします。
編集 > プラグイン を開く。
検索欄に「Steam」と入力して、リストに表示されたOnline Subsystem Steamにチェックを入れてエディターを閉じてください。
PCでDefaultEngine.iniの編集
PCでDefaultEngine.iniを編集します。
これはテキスト形式ですから、Windowsのメモ帳で編集できます。
DefaultEngine.iniは、新しいプロジェクトを作成すると、自動的にConfigフォルダ内に生成されています。
(MyProject)/Config/DefaultEngine.ini
Online Subsystem Steamと連動
DefaultEngine.iniをメモ帳で開きます。
一番下に↓を追加します。一行空けて追加した方が見やすいです。
+NetDriverDefinitions=(DefName=”GameNetDriver”,DriverClassName=”OnlineSubsystemSteam.SteamNetDriver”,DriverClassNameFallback=”OnlineSubsystemUtils.IpNetDriver”)[OnlineSubsystem]
DefaultPlatformService=Steam[OnlineSubsystemSteam]
bEnabled=true
SteamDevAppId=*******
; If using Sessions; bInitServerOnClient=true[/Script/OnlineSubsystemSteam.SteamNetDriver]
NetConnectionClassName=”OnlineSubsystemSteam.SteamNetConnection”
実績を追加
DefaultEngine.iniに実績のAPI名を追加します。
先ほど追加した中のSteamDevAppIdの下に Achievement_0_Id=******* を追加。
*******にはAPI名を記載します。
2つめの実績は Achievement_1_Id=******* になります。
3つめの実績は Achievement_2_Id=******* になります。
Steamと連動できているかの動作確認
Steamアプリを起動し、ログインしてください。
Unreal Engineを起動し、スタンドアローンゲームでプレイします。
ゲームが起動すると、Steamアプリが反応します。
ゲーム画面の右下にSteamアプリの反応があれば連動できています。

この時点で自分のSteamライブラリに自分のゲームが登録されています。
プレイ時間も記録されています。
Unreal Engineで実績獲得のためのノードを組む
私はGameInstanceに実績獲得カスタムイベントを作成しています。
Player ControllerからCache Achivementsを繋いでSteamの実績システムを呼び出す。
そのOn Successから実行ピンを繋げてWrite Progressで実績の進行状況を更新します。
Achievement Nameは実績のAPI名です。
Stringを入力しても良いのですが、私はEnumで管理しています。
このAchievement Nameで各実績(API名)を呼び出して、Progressの値を書き換えて実績獲得となるわけです。
Progressは、Steamworksで実績を追加した時、進行状況を設定しています。
私の場合、全て「最小値:0」「最大値:1」でした。
ゆえにProgressを1.0に更新すると実績獲得となります。
例えば「最大値:100」に設定していたなら、Progressを100.0にしないと実績獲得にはなりません。
ストアページの編集でSteam実績にチェックを入れる
Steamworksのストアページの編集で、「対応している機能」欄の「Steam実績」にチェックを入れておきましょう。

ゲームをSteamにアップロードしてから出来ること
実際にゲームプレイで実績が獲得できるかどうかの確認は、Steamにゲームをアップロードしてからでないと確認できません。
ゲームのアップロード方法は↓
Steam用にUnreal Engine 5のゲームをパッケージ化してアップロードする方法
実績が獲得可能かのテストプレイ
Steamアプリを起動し、ログインしてください。
Unreal Engineを起動し、スタンドアローンゲームでプレイします。
そのままプレイして実績獲得条件を達成すると、実績が獲得できます。
つまり、1つのアカウントで実績の獲得テストを何度も行うことはできません。





コメント