跳轉到主要內容
在 XBOX Game Development Kit (GDK) 和 Steam 中,成就都具有名稱、描述、圖示、是否已為目前使用者解除鎖定等資訊,以及完成成就的進度(選擇性)。Steam 也有統計資料 API,遊戲會使用它將使用者的進度與某個預先設定的目標進行比較,並在超過這些目標時解除鎖定成就。 事實上,XBOX Game Development Kit (GDK) 有兩個成就 API:以事件為基礎(先前稱為 Achievements 2013)和_遊戲管理_(先前稱為 Achievements 2017)。雖然這兩個系統都是可行的選項,但如果您是從 Steam 轉換過來,遊戲管理的成就/統計資料會讓您更熟悉,而且會符合您遊戲中可能已存在的邏輯。因此,本主題將說明該 API。如需這兩個 API 之間差異的詳細資訊,請參閱以事件為基礎與遊戲管理的成就。下列各節說明 Steamworks API 與 XBOX Game Development Kit (GDK) 中成就的差異。 若要使用遊戲管理的成就 API,您需要建立 XBOX 服務內容控制代碼。您可以使用 XblContextCreateHandle 函式和來自 XUserAddResult API 的 XUserHandle(來自使用者驗證和擁有權主題)來完成此動作。

追蹤成就進度

在 Steam API 中,您可以使用 ISteamUserStats::GetStat/ISteamUser::SetStat API 追蹤使用者在成就上的進度,使儲存在 Steam Stats API 中的值成為目前進度值的事實來源。 使用遊戲管理的成就時,您的遊戲是唯一的事實來源,必須自行追蹤使用者的目前進度。透過 API 呼叫更新雲端中的目前進度,是一種「簽入」動作,用於在 XBOX 生態系統的某些介面中顯示使用者的進度。關於目前進度值應存放在何處並沒有特定指引,但許多遊戲選擇將它儲存在存檔中(以及雲端中),而其他遊戲則可能儲存在自己的後端服務上。請務必讓雲端與遊戲內部統計資料管理系統之間的值保持同步。

列舉所有成就

若要使用 Steamworks API 取得使用者的所有統計資料,您通常會呼叫 ISteamUserStats::RequestUserStats 從伺服器提取最新的統計資料。在它引發對應的回呼之後,您就可以使用 ISteamUserStats::GetStat/ISteamUserStats::GetAchievement 函式依 API 名稱逐一查看每個成就,並使用它們傳回的資料初始化遊戲狀態。 使用 XBOX Game Development Kit (GDK) 時,您只要使用 XblAchievementsGetAchievementsForTitleIdAsync 函式,然後使用 XblAchievementsResultGetAchievements 之 Out 參數所提供陣列中每個成就物件的資料來初始化遊戲狀態即可。每個成就都以 XblAchievement 結構提供。如需其所包含資料的詳細資訊,請參閱其參考主題。

Steamworks

XBOX Game Development Kit (GDK)

如需遊戲管理成就的詳細資訊,請參閱取得遊戲管理的成就。

更新成就進度和解除鎖定成就

在 XBOX Game Development Kit (GDK) 和 Steam 中,都是由遊戲的程式碼決定何時應解除鎖定成就。使用 XBOX Game Development Kit (GDK) 時,將成就的進度設定為 100 即可解除鎖定。下列各節說明使用這兩個 API 更新使用者在指定成就上之進度所需的步驟。 以下是在兩個 SDK 中實作的 UpdateAchievement 方法程式碼範例,它會接收成就識別碼/API 名稱(在 Steam 中還有統計資料 API 名稱)、成就要遞增的數量,以及解除鎖定該成就的目標值,並據此更新成就的進度和解除鎖定狀態。

Steamworks

XBOX Game Development Kit (GDK)

如需遊戲管理成就的詳細資訊,請參閱更新遊戲管理的成就。

離線成就

解除鎖定 XBOX 成就不需要網路連線。如果使用者未連線到 XBOX 網路(也稱為 XBOX Live),成就稍後會自動與伺服器同步解除鎖定,不需要額外的程式碼。

取得其他使用者的成就

若要取得其他使用者的成就,您只要使用要擷取其成就之使用者的 XBOX 使用者識別碼 (XUID) 呼叫 XblAchievementsGetAchievementsForTitleAsync/XblAchievementsGetAchievementAsync 函式即可。這類似於在 Steam 中使用 ISteamUser::RequestUserStats、ISteamUserStats::GetUserStat 和 ISteamUserStats::GetUserAchievement 函式。

重設成就

Steamworks API 的 ISteamUserStats::ResetAllStats 可用來重設使用者在所有統計資料上的進度,以及(如有指定)成就;但與此不同,XBOX Game Development Kit (GDK) 沒有記載以程式設計方式重設成就進度或解除鎖定狀態的功能。嘗試以進度值 0 呼叫 XblAchievementsUpdateAchievementAsync 會讓進度值保持不變。不過,您可以在測試時使用玩家資料重設工具 (XblPlayerDataReset.exe) 來達成此目的。

速率限制

更新成就進度時,請小心避免過於頻繁地呼叫 XBOX Services API (XSAPI),因為這可能會導致您的遊戲達到其速率限制。這可能會造成非預期的行為,並為使用者帶來不良的體驗。 對於追蹤經常更新之統計資料的成就,請嘗試批次處理 API 呼叫,使其在發生特定數量的事件後引發,或以特定時間間隔在伺服器上更新。 您可以使用 XBOX 服務追蹤分析器 (XblTraceAnalyzer.exe) 偵錯您的 API 呼叫。 如需 XBOX 服務速率限制的詳細資訊,請參閱精細速率限制。
最後修改於 2026年10月6日