実績を使うことで、プレイヤーのやる気を駆り立てて報酬や調整を与え、ゲームの魅力を十分に演出できるようプレイヤーを導くことができます。また、ゲームのリプレイバリューを高めたり、プレイヤーとそのフレンドとの競争をサポートしたりすることもできます。 実績を付与する機能は多くのオンライン サービスでは提供されており、オンライン サブシステムでは Achievements インターフェース を通じてこれをサポートしています。
「実績」という用語は必ずしも各種オンライン サービスに共通の用語ではありませんが、Unreal Engine ではこの概念とそのサポート システムを表すのに「実績」を使用します。
オンライン サブシステムでは実績システムを使用するためのインゲーム機能を提供しますが、実績自体の作成、削除、または変更に関連する機能は処理しません。 それぞれのオンライン サービスには、実績管理をサポートする独自のバックエンド システムが備わっています。
実績データを入手する
実績データには、プレイヤーによってアンロック (または部分的にアンロック) された実績を示す「プレイヤー固有のデータ」と、呼び出された実績やそれを表すアイコンなどの「一般的データ」の両方が含まれます。
実績データを取得する
実績データは、オンライン サービスへの非同期呼び出しを通じて、リクエストによって取得できます。
このデータは、実績の ID と特定のプレイヤーの完了率、および実績の説明 (当該の実績自体に関連し、すべてのプレイヤーに共通のもの) の 2 つに分割されます。
利用可能な実績のリストを受け取るには、情報を取得したいプレイヤーの FUniqueNetId
を含めて QueryAchievements
を呼び出します。
成功した結果とともにデリゲート (FOnQueryAchievementsCompleteDelegate
型) が呼び出されると、(当該プレイヤーの) 実績の ID と完了率がキャッシュされます。
これらの実績に関する情報を表示して効果的に使用するには、その完全な説明が必要になります。
これらは FOnQueryAchievementsCompleteDelegate
を通じてリクエストできます。これにより、与えられた FOnQueryAchievementsCompleteDelegate
型のデリゲートも完了時に呼び出されます。
実績データを調べる
データがキャッシュされたら、いくつかの関数呼び出しを使ってこれを調べることができます。
GetCachedAchievements
はすべての既知の実績 ID を含む配列を返すため、これから始めることをお勧めします。
その後、これらの ID を使って、特定のプレイヤーの FUniqueNetId
を含めて GetCachedAchievement
を呼び出し、そのプレイヤーの当該の実績の完了率をチェックしたり、GetCachedAchievementDescription
へのパラメータとして、([FOnlineAchievementDesc
] 型(https://api.unrealengine.com/INT/API/Plugins/OnlineSubsystem/Interfaces/FOnlineAchievementDesc/index.html)) の完全な実績の説明を返したりすることができます。
実績データを設定する
実績は、個々のユーザーに対して完全または部分的にアンロックすることができます。 たとえば、ゲームをクリアしたプレイヤーには「ゲーム制覇」実績が用意されている一方で、特定のテクニックを一度使ったプレイヤーに対して、「このテクニックを 1000 回使用」実績の 1/10 パーセントが与えられる場合があります。 また、ほとんどのオンライン サービスでは、ゲームのプレイヤーの実績のリセットがサポートされているため、テスティングの際に、ゲームで新たなテストを行うたびに新しいアカウントを作成する必要がなくなります。
実績データを書き込む
WriteAchievements
関数は 1 つ以上の実績 アップデートを受け取り、それらをオンライン サービスに送信します。これにより、指定した FOnAchievementsWrittenDelegate
型のデリゲートへの呼び出しが完了時に発生します。
各アップデートは単一の FOnlineAchievementsWrite
を含む参照型で、FOnlineStats
オブジェクト周りのラッパーとして機能します。
Properties
フィールドを介して送信されるキー / 値のペアには、実績 ID に一致するキーと、0.0 ~ 100.0% の範囲の完了率を含む float
が必要です。
ほとんどのオンライン サービスでは、プレイヤーの実績の完了率を、実際に記録された値と同じ、あるいはより低い値に変更しようとする試みは却下されるため、アップデートの送信前に現在の完了率を必ずチェックするようにしてください。
実績データをリセットする
開発とテスティングの段階では、ResetAchievements
関数を使って、現在のタイトルに提供されたすべてのプレイヤーの実績をリセットできます。
ポリシーはそれぞれのオンライン サービスで異なる場合がありますが、この関数がテスティング環境外でも機能するとは想定しないでください。
この関数は出荷ビルドには存在しないため、必ずそれを呼び出すコードをすべて削除するか、以下のような、このコードをマスクするコンパイル時のロジックを使用してください。
#if !UE_BUILD_SHIPPING
// ResetAchievements への呼び出しをします
#endif