跳轉到主要內容
Steamworks 和 XBOX Game Development Kit (GDK) 在結構、API 模式和用途上有許多差異。本主題將概述這些差異。

XBOX Game Development Kit (GDK) 中沒有 API 單一實例

Steamworks 遵循的模式是將每個 API 功能集定義為一個介面(例如,所有使用者統計資料函式都在 ISteamUserStats 介面中,而遠端儲存則在 ISteamRemoteStorage 中),一旦遊戲在程式碼中初始化 API,就會提供這些介面的執行個體。在遊戲啟動時初始化的 Steamworks API 單一實例會提供這些函式,並在應用程式的整個生命週期中追蹤狀態。 XBOX Game Development Kit (GDK) API 並非如此,它偏好使用 C API,其中大部分的內容和 API 資料的目前狀態都必須由遊戲本身保存,並傳遞給各種 API 函式。例如,使用 XBOX 服務驗證使用者之後,遊戲必須保存 XBOX 服務內容控制代碼和使用者控制代碼。用來取得此資訊的 API 不會像 Steamworks 那樣在遊戲的整個生命週期中「記住」它們。因此,您需要在遊戲類別中新增成員變數,或以其他方式在遊戲中追蹤這些控制代碼。

非同步函式和回呼

Steamworks 中的非同步函式會觸發事件,您可以使用 STEAM_CALLBACK 巨集或 CCallResult 變數訂閱這些事件。當對應到指定事件結構類型的事件引發時,就會呼叫指定的方法,並提供事件結構作為其唯一引數。此結構包含 API 傳回的結果,以及處理呼叫結果時可能需要的先前可用內容資訊。例如,呼叫 ISteamUserStats::DownloadLeaderboardEntries 時,您在回呼函式中需要一個 SteamLeaderboard_t 控制代碼以傳遞給 ISteamUserStats::DownloadLeaderboardEntries,您可以從傳遞給您所定義之回呼方法作為參數的 LeaderboardScoresDownloaded_t 結構成員取得它。 在 XBOX Game Development Kit (GDK) 中,所有非同步動作都遵循不同的模式:您建立 XAsyncBlock 結構,選擇性地將它指派給工作佇列,然後呼叫非同步 API 方法。該 API 呼叫完成後,會引發定義為 XAsyncBlock 成員的回呼函式,並提供非同步區塊的指標作為唯一引數。如果您需要在回呼函式內存取資訊,可以使用非同步區塊的內容指標成員來達成。與 Steam 不同,此內容結構中的資訊不會自動提供,您需要自行建構。以先前的範例來說,如果您需要在回呼函式中存取一組資料,可以如下列程式碼範例所示進行。
先前的範例也透過 shared_from_this() 包含了指向 this 的指標,讓回呼函式在需要時能夠呼叫執行個體方法或存取成員變數。由於生命週期問題,傳遞原始指標時請務必非常小心。另請注意,如果您在回呼中只需要存取一個變數,只要將非同步區塊的 context 指標值設定為指向該值的指標,然後在回呼中轉換為該值的類型即可,而不需要定義結構。
Steamworks 也要求遊戲程式碼使用 SteamAPI_RunCallbacks 函式,以某個間隔引發回呼。在 XBOX Game Development Kit (GDK) 中不需要這樣做。如果使用執行緒集區工作佇列(這是預設值),回呼會在其工作佇列所分派的非同步工作完成後觸發。 如需更多控制,您可以在使用手動工作佇列時呼叫 XTaskQueueDispatch,手動將非同步工作分派到特定執行緒。這種方式較為複雜,相關細節不在本指南的範圍內。如需 XBOX Game Development Kit (GDK) 如何處理非同步 API 作業的詳細資訊(包括程式碼範例),請參閱非同步程式設計模型。

遊戲管理 API 的事實來源

在 Steamworks 中,API 幾乎是其所接觸之每個值的唯一事實來源。例如,使用者統計資料是從 API 擷取,並根據 ISteamUserStats::GetStat/ISteamUserStats::SetStat 的值計算,您不需要自行將這些值儲存在其他地方。 XBOX Game Development Kit (GDK) 中的成就和統計資料/排行榜 API 都有遊戲管理的選項,適合希望在所需呼叫上擁有更多彈性和簡便性的開發人員。顧名思義,遊戲管理 API 的值是由您的遊戲管理。這些值的唯一事實來源是您的遊戲,遊戲可以將這些值儲存在任何地方,例如存檔、雲端儲存或第三方後端伺服器。儲存在 XBOX 網路(也稱為 XBOX Live)伺服器上的值可以作為您偶爾更新的快照,但不應作為執行階段的唯一事實來源。 遊戲管理統計資料/成就的替代選項是以事件為基礎的統計資料/成就。這些使用遙測事件來更新使用者的成就進度或重新計算其統計資料,並將 XBOX 服務視為其事實來源。您可以在 Partner Center 中遊戲的 Gameplay Setting 頁面,選擇要用於統計資料和成就的 API。 如需詳細資訊,請參閱比較以事件為基礎與遊戲管理的統計資料和以事件為基礎與遊戲管理的成就之主題中的說明。您有時可能會看到這些 API 以先前的名稱稱呼:_Stats/Achievements 2013(以事件為基礎)_和 Stats/Achievements 2017(遊戲管理)。

XBOX Game Development Kit (GDK) 是多平台的

使用 Steamworks API 的遊戲可以假設它們一律透過 Steam 啟動,因此 API 可以在初始化時注入一些關於誰在玩遊戲的內容。使用 XBOX Game Development Kit (GDK) 的遊戲可以在 XBOX 主機上執行、在 PC 上透過 XBOX Gaming App 執行,或在任意數量的裝置和啟動器上執行。 因此,某些在 Steam 中自動可用的內容(例如使用者的身分識別)可能需要在 XBOX Game Development Kit (GDK) 中手動初始化。若要存取此資訊,您可以依照本指南中初始化 GDK 主題中的步驟操作,其中提供使用使用者的 Microsoft 帳戶/玩家代號驗證使用者的指示。這也表示 XBOX Game Development Kit (GDK) 的函式中有一些針對主機情境量身打造的典範,例如 XUser API 的多使用者登入支援,這些在 PC 上沒有對應的功能。

封裝

Steam 上的大多數遊戲只要在 Steamworks 管理入口網站中設定遊戲資訊、下載 SDK、匯入必要檔案,並在程式碼中初始化 API,即可使用 Steamworks API 函式。完成這些步驟後,無論從何處啟動(例如遊戲引擎編輯器),您的遊戲都會與 Steamworks API 整合。 若要讓 XBOX Game Development Kit (GDK) API 運作,您的遊戲必須先經過封裝。若要正確封裝遊戲,您需要編輯遊戲的 MicrosoftGame.config 檔案,並使用 XBOX Game Development Kit (GDK) 中的 MakePkg 工具為遊戲建立 MSIXVC 套件,然後您就可以在已啟用開發人員模式的 PC 上,將它側載為 Microsoft Store 應用程式。 這也表示,與 Steamworks 遊戲不同,若未先封裝遊戲,XBOX Game Development Kit (GDK) 的某些功能將無法在遊戲引擎編輯器或其他開發階段環境中運作。 如需封裝的詳細資訊,請參閱下列資源。

開發和測試 Unity 遊戲

使用 Unity 遊戲引擎建置的遊戲可以使用 GDK Unity 外掛程式來開發。此外掛程式包含在 XBOX Game Development Kit (GDK) 中,也以獨立增益集的形式在 XBOX Developer Downloads 入口網站上提供。此外掛程式包含 API 包裝函式,可讓您在遊戲的 C# 程式碼中呼叫 XBOX Game Development Kit (GDK) 函式。 如需 GDK Unity 外掛程式的詳細資訊,請參閱開始使用 Unity 進行 PC 開發。
最後修改於 2026年10月6日