Steamの実績システムをUnreal Engine 5で実装する方法

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のカラーアイコン。
  • 未達成アイコン
    達成アイコンを白黒にする。

『アンリアル病院8』では、↓のように設定しました。

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をメモ帳で開きます。
一番下に↓を追加します。一行空けて追加した方が見やすいです。

[/Script/Engine.GameEngine]
+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=******* になります。

私の場合、6つの実績を↓のように追加しました。

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つのアカウントで実績の獲得テストを何度も行うことはできません。

コメント

タイトルとURLをコピーしました