在 Partner Center 中创建产品
在将游戏发布到 Microsoft Store 之前,你需要在 Partner Center 中创建启用了 XBOX 服务的产品。有关 Partner Center 的更多信息,请参阅 Setting up an app or game in Partner Center, for Managed Partners。将 GDK 集成到 C/C++ 游戏
要将 GDK 集成到 C/C++ 游戏,游戏需要 4 项内容:- GDK 与 XBOX Services API(XSAPI)的 头文件,用于描述 API 签名和数据结构。
- 导入库(import library) ,用于告诉链接器如何解析对已导出 GDK 函数的外部引用。
- XSAPI 的静态库或 导入库,用于告诉链接器如何解析对已导出 XSAPI DLL 函数的外部引用。
- XSAPI 提供静态和动态两种形式。请参考下方表格并从其中选择一种。
- 动态链接库,其中实际包含 GDK 与 XSAPI 函数的运行时实现(如果使用动态版本的 XSAPI)。
对于采用基于插件的架构、功能分布在多个 DLL 中的游戏,我们建议并支持通过
Thunks.dll 将 XSAPI 集成进去。这种方式在 PC 与 XBOX 平台上都能可靠工作。当你将 XSAPI 静态链接到多个 DLL 时,每个 DLL 都会维护自己的一份全局状态。因此在一个 DLL 中调用 XblInitialize 并不会初始化其他 DLL 中的 XSAPI。将 XSAPI 句柄在包含独立静态实例的多个 DLL 之间共享,可能会导致崩溃或不可预测的行为。Thunks.dll 通过提供一个 XSAPI 及其状态的共享实例来解决这一问题。可以避免重复,并确保所有 DLL 的行为一致。虽然技术上可以将 XSAPI 静态链接到一个 DLL 并导出符号,但这种方式更复杂、更易出错。使用 Thunks.dll 更简单、更安全,并且是完全受支持的。为项目添加 Gaming Runtime Services 与 XSAPI 的要求
以下步骤概述了你需要对项目做的修改,以确保它具备使用 Gaming Runtime Services 与 XSAPI 的所有要求。- 确保面向 x64。在 Visual Studio 中,进入 Build->Configuration Manager,并将 Active solution platform 设为 x64。
- 添加以下包含路径:
C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\GameKit\IncludeC:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\IncludeC:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Include其中 GDK version number 是以年份、月份及子版本号命名的目录。例如,2022 年 6 月 GDK 的目录名为 220600。对于 Microsoft GDK(2024 年 6 月)或更早版本,请使用 C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Include 和 C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\DesignTime\CommonConfiguration\Neutral\Include。在 Visual Studio 中,可在项目属性页 Configuration Properties->VC++ Directories->Include Directories 中添加这些路径。 - 添加以下导入库的库路径:
C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\GameKit\Lib\amd64C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\Lib\x64\ReleaseC:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Lib\x64其中 GDK version number 是以年份、月份及子版本号命名的目录。例如,2022 年 6 月 GDK 的目录名为 220600。对于 Microsoft GDK(2024 年 6 月)或更早版本,请使用 C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release 和 C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\DesignTime\CommonConfiguration\Neutral\Lib。在 Visual Studio 中,可在项目属性页 Configuration Properties->VC++ Directories->Library Directories 中添加这些路径。 - 将以下库添加到项目要链接的库列表中:
C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\GameKit\Lib\amd64\xgameruntime.libC:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\Lib\x64\Release\Microsoft.Xbox.Services.GDK.C.Thunks.lib(或在静态链接时使用 Microsoft.Xbox.Services.142.GDK.C.lib)C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Lib\x64\libHttpClient.GDK.lib其中 GDK version number 是以年份、月份及子版本号命名的目录。例如,2022 年 6 月 GDK 的目录名为 220600。对于 Microsoft GDK(2024 年 6 月)或更早版本,请使用 C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\Release\Microsoft.Xbox.Services.GDK.C.Thunks.lib(或在静态链接时使用 Microsoft.Xbox.Services.142.GDK.C.lib) 和 C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\DesignTime\CommonConfiguration\Neutral\Lib\libHttpClient.GDK.lib。在 Visual Studio 中,可在项目属性页 Configuration Properties->Linker->Input->Additional Dependencies 中添加这些库。 - 定义 _GAMING_DESKTOP 与 WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP。在 Visual Studio 中,可在项目属性页 C/C++->Command Line->Additional Options 中添加以下一行:
/D "_GAMING_DESKTOP" /D "WINAPI_FAMILY=WINAPI_FAMILY_DESKTOP_APP" - 创建一个 MicrosoftGame.config 文件,并确保它在构建期间会被拷贝到与 .exe 相同的目标目录。注意: 如果你的引擎支持在编辑器中运行(使用不同 .exe)之类的功能,也需要确保 MicrosoftGame.config 被拷贝到那个 .exe 所在目录。如果 MicrosoftGame.config 未与 .exe 位于同一目录,使用在编辑器中运行功能时 XBOX 服务将无法工作。开始开发时,你可以使用类似下例的默认值配置。Identity Name、Executable Name 和 Executable Alias 的值都要替换为你自己可执行文件的名称。
- 确保 Microsoft.Xbox.Services.GDK.C.Thunks.dll(如果动态链接)、XCurl.dll 和 libHttpClient.GDK.dll 的副本在构建期间被拷贝到与 .exe 相同的目标目录。注意: 如果你的引擎支持在编辑器中运行(使用不同 .exe)之类的功能,你需要确保该 .exe 也能引用到这些 .dll。如果 .exe 未引用到这些 .dll,使用在编辑器中运行功能时 XBOX 服务将无法工作。若动态链接 XSAPI,Microsoft.Xbox.Services.GDK.C.Thunks.dll 位于 GDK 安装目录的:
C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\Lib\x64\[Debug|Release]。XCurl.dll 位于:C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.XCurl.API\Redist\x64。libHttpClient.GDK.dll 位于:C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Redist\x64。其中 GDK version number 是以年份、月份及子版本号命名的目录。例如,2022 年 6 月 GDK 的目录名为 220600。对于 Microsoft GDK(2024 年 6 月)或更早版本,请使用 C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.Services.API.C\DesignTime\CommonConfiguration\Neutral\Lib\[Debug|Release]、C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.XCurl.API\Redist\CommonConfiguration\neutral 和 C:\Program Files (x86)\Microsoft GDK\[GDK version number]\GRDK\ExtensionLibraries\Xbox.LibHttpClient\Redist\CommonConfiguration\neutral。
或者,如果你要将 GDK 集成到现有的 Visual Studio Desktop 项目中,可以按照本主题的步骤将项目转换为 GDK 项目:Adding the Microsoft Game Development Kit to an existing desktop project。
更新 MicrosoftGame.config
上一步创建的 MicrosoftGame.config 文件使用默认值,可以在不进一步配置的情况下开始在 PC 和 XBOX 上进行早期开发,直到你开始使用 Gaming Runtime、Microsoft Store 和标题标识相关的功能。为使用 XBOX 服务功能,你需要根据 Partner Center 项目的标识详情更新项目的 MicrosoftGame.config。- 前往 Partner Center 仪表板。
- 从产品列表中选择你的游戏。
- 选择 Game setup 标签页,然后选择 Identity details。
- 选择 Show Details 以展开 Identity details 部分。
- 使用 Identity details 部分表格中的以下值,将其从 Partner Center 复制到 MicrosoftGame.config 中对应的元素和字段。
例如,Partner Center 中的以下标识详情会让你的 MicrosoftGame.config 类似下方示例:
初始化 Game Runtime 与 XSAPI
以下步骤展示如何在游戏中初始化 Gaming Runtime Services 与 XSAPI。- 包含 XGameRuntime 头文件与 XSAPI services-c 头文件。
- 调用 XGameRuntimeInitialize 初始化 GDK 运行时。
- 调用 XblInitialize 初始化 XSAPI。
反初始化 Game Runtime
在游戏退出前需要反初始化 Gaming Runtime Services。XSAPI 无需在退出前显式清理。 通过调用 XGameRuntimeUninitialize 反初始化 GDK 运行时。有关实现 GDK 功能的概述,参见 Game Development Kit (GDK) features。
在游戏中测试 XBOX 服务
要在游戏中测试成就等 XBOX 服务功能,你需要使用一个沙箱以及具有该沙箱访问权限的测试账户。创建测试账户
要在游戏中测试任何 XBOX 服务功能,你需要创建具有开发沙箱访问权限的测试账户。关于创建测试账户的信息,参见 Creating test accounts。切换沙箱
创建测试账户后,按以下步骤使用该账户访问你的沙箱。- 要查找你的沙箱 ID,请前往 Partner Center。
- 选择 XBOX services,然后选择 Gameplay Settings。
你的沙箱 ID 位于第一个标签页,形如 “ABCDEF.0”。
- 打开 开始 菜单。
- 输入 Microsoft GDK Command Prompts,然后按键盘上的 Enter。
- 打开第一个命令提示符。
- 在命令提示符中输入 XblPCSandbox.exe [your sandbox ID]。
- 命令提示符启动多个应用后,使用你的测试账户登录 XBOX App。
发布
要准备发布游戏,你需要:- 完成游戏与 GDK 的集成
- 按照 Getting started with packaging titles for a PC by using the MSIXVC packaging tools 的步骤创建游戏包
