> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

# XR-115 游戏过程中添加和移除用户或控制器

> XR-115 定义多用户游戏如何在游戏过程中处理控制器的添加和移除以及用户登录和注销，并提供最佳做法和测试用例。

版本 1.1，2021/5/1

支持多个用户的游戏必须按如下方式，对游戏过程中添加和移除用户的情况，以及活动玩家未分配控制器或控制器丢失的情况做出响应：

**添加控制器：** 在游戏选择了初始用户和控制器或获得了初始用户和控制器后，游戏可以选择接受来自其他控制器的输入。支持多人游戏体验的游戏应考虑如何将额外的玩家或控制器添加到游戏过程中，并通过 XUserAddAsync 将其绑定到用户。例如，“按 A 加入”，或者在玩家选择屏幕上显示控制器轮廓。

**移除控制器：** 如果在游戏过程中移除了驱动游戏过程的玩家控制器，游戏必须允许重新建立新的活动控制器（例如，“按 A 继续”，或者在 ERA 中收到 ControllerPairingChanged 事件，或在 GDK 中收到针对具有有效控制器的活动用户的 XUserDeviceAssociationChangedCallback 事件）。游戏还可以使用 XUserFindControllerForUserWithUiAsync 调用系统 UX，提示用户将控制器与其用户配对并返回游戏过程。

**添加用户：** 使用 GDK（无论使用简化用户模型还是高级用户模型）时，只有当游戏调用 XUserAddAsync 时才会添加用户。

**移除主要用户：** 对于使用 GDK 高级用户模型的游戏，如果主要用户已注销（通过指南、SPOP 或其他方式），游戏必须从游戏中移除该玩家，或者重新建立用户和活动控制器。

对于使用 GDK 简化用户模型的游戏，移除主要玩家将导致游戏在系统级别被挂起。

在所有情况下，游戏都通过使游戏处于良好状态来处理移除/关闭。这包括写入连接存储、通知任何相关的 MPSD 会话该用户已离开，以及在尚未添加新用户的情况下将用户带到适当的登录位置。

**移除其他/次要用户：** 游戏可以自行决定如何处理此事件，通常是立即将该玩家从游戏过程中移除，或者在所使用的多人游戏体验的上下文中提示该玩家重新加入。

## 实施指南和最佳做法

最佳做法是在活动玩家的控制器被移除时暂停游戏过程。

当活动用户注销时，最佳做法是尽可能多地保存用户进度，以便用户返回体验时，几乎可以回到他们离开时的位置。

如果游戏支持多个已登录用户，当某个活动用户注销而其他活动用户仍处于登录状态时，最佳做法是尽可能允许其他活动用户继续当前体验。对于游戏，可以将已注销的用户完全从游戏过程中移除，或者将其替换为由计算机控制的玩家。

## 其他资源

## 认证测试用例

下表显示了在使用 GDK 简化用户模型，或者使用 GDK 高级用户模型、ERA 和 UWP 多用户应用程序时，XR-115 的哪些测试用例适用于你的游戏。

| 测试用例 | 适用于 GDK 简化用户模型 | 适用于 GDK 高级用户模型、ERA 和 UWP MUA |
| - | - | - |
| 115-01 添加用户 | 否 | 是 \* |
| 115-02 移除控制器 | 是 | 是 |
| 115-03 移除用户 | 否 | 是 |

\* **115-01 添加用户** 仅适用于 ERA 和 UWP 多用户应用程序。使用 GDK 时，游戏只能看到它们有意添加的用户。GDK 游戏无法得知通过外壳添加的用户。

**115-01 添加用户**

> **测试步骤**
>
> 1. 登录个人资料 A，并确保没有其他个人资料处于登录状态。
> 2. 启动游戏并进入游戏过程。
> 3. 在使用游戏期间的各个时间点，连接第二个控制器并登录个人资料 B。
> 4. 个人资料 B 尝试向游戏提供控制器输入。
>
> **预期结果**\
> ERA 或 UWP MUA 游戏不得自动中断活动用户的体验。
>
> **通过示例**
>
> 1. 游戏不会自动将活动用户切换为新用户，也不会中断活动用户的体验。
> 2. 游戏可以根据当前上下文选择允许个人资料 B 控制游戏。
>
> **失败示例**
>
> 1. 游戏立即将上下文切换为以个人资料 B 作为活动用户。

**115-02 移除控制器**

> **测试步骤**
>
> 1. 登录一个个人资料并启动游戏。
> 2. 在使用游戏期间的各个时间点，从控制器中取出电池。
> 3. 将电池重新装入控制器，并验证用户可以继续使用游戏。
> 4. 重复步骤 \[1] - \[3]，但改为连接第二个控制器，而不是重新装入电池。
>
> **预期结果**\
> 游戏必须正确响应控制器的移除和添加。
>
> **通过示例**
>
> 1. 移除或添加控制器后，活动用户应能够继续使用游戏。
> 2. 系统提示用户重新建立新的活动控制器（例如，“按 A 继续”，或者调用系统 UX）。
>
> **失败示例**
>
> 1. 移除控制器后，用户无法继续使用游戏。

**115-03 移除用户**

> **测试步骤**
>
> 1. 登录个人资料 A，并确保没有其他个人资料处于登录状态。
>
> 2. 启动游戏并进入游戏过程。
>
> 3. 在使用游戏期间的各个时间点，注销个人资料 A。
>
> 4. 验证游戏调用账户选择器，或者将用户返回到前端。
>
> 5. 在可能的情况下，通过以下方式与游戏交互：
>
> * 登录个人资料 A，并确保游戏不会进一步中断用户的体验。
> * 登录个人资料 B，并确保游戏更新为新用户的上下文。
>
> **预期结果**\
> 游戏必须从游戏中移除该玩家，或者重新建立用户和活动控制器。如果从游戏中移除了该玩家，游戏应保持良好状态。这包括写入连接存储、通知任何相关的 MPSD 会话该用户已离开，以及在尚未添加新用户的情况下将用户带到适当的登录位置。
>
> **通过示例**
>
> 1. 游戏从游戏中移除该玩家并返回到前端。
> 2. 游戏允许用户重新建立新用户，并正确更新为相关的用户上下文。
>
> **失败示例**
>
> 1. 游戏未对用户状态的变化做出反应。
> 2. 选择新的个人资料后，游戏继续使用个人资料 A 的用户状态。


## Related topics

- [XBOX 游戏的 XBOX 要求](https://docs.xbox.com/zh-CN/publishing/certification/xbox-requirements.md)
- [XR115 在游戏过程中添加和移除用户或控制器](https://docs.xbox.com/zh-CN/publishing/certification/fma/xr-115.md)
- [经测试的 XBOX 要求](https://docs.xbox.com/zh-CN/publishing/certification/console-cert-tested-requirements.md)
- [XBOX 要求和政策支持内容](https://docs.xbox.com/zh-CN/publishing/certification/xr/overview.md)
- [XR-112 激活和恢复时的用户与控制器设置](https://docs.xbox.com/zh-CN/publishing/certification/xr/xr-112.md)
