多人游戏角色

本主题介绍如何在 Xbox 服务多人游戏中定义玩家角色。 某些游戏会话可能需要向特定玩家分配游戏角色–例如辅助、医疗或攻击。 可能还需要为可以担任特定游戏角色的玩家保留空位。

通过使用 Xbox 服务角色功能,该服务可以跟踪为每个游戏角色分配的玩家,并强制执行可以选择特定游戏角色的最大玩家数。

角色的最常见用途是确定游戏会话的特定游戏角色。 例如,一种游戏模式下可能需要一到两个辅助类角色、至少一个坦克/重型类角色,以及不超过五个攻击类角色。

在另一种情景中,可能需要指定游戏会话可以拥有正好四个游戏玩家、最多八个观众和正好一个解说员。

通过其他方法(例如会话浏览)填补剩余空位时,还可以使用角色为好友保留空位。

角色类型

一个角色类型 代表一组角色定义。 必须将每个角色定义为一个角色类型的一部分。 多人游戏会话文档中定义了各种角色类型。

一名玩家只能分配到一个角色类型中的一个角色。 例如,如果一个角色类型包含医师、坦克和伤害,则只能向一名玩家分配其中一种角色。

可以定义多个角色类型,且一名玩家可以分配到每个角色类型中的一个角色。 在之前的情景中,选择了医师角色的玩家也可以分配到小队队长的角色(如果小队队长属于另一种角色类型)。

角色类型属性

定义角色类型时,必须指定下列信息。

  • 角色类型的名称。 名称必须为小写字母数字形式,且长度不超过 100 个字符。
  • 角色的定义。
  • 角色是否由所有者管理。
  • 是否可在会话有效期间更改角色属性。

如果角色类型由所有者管理,则只有作为会话所有者的玩家才能分配此类型的角色。 如果角色类型并非由所有者管理,则玩家可以将角色分配给自己。

可指定一个角色类型仅在具有hasOwners功能集的会话中由所有者管理。

注意

Xbox Services API (XSAPI) 当前不支持所有者向其他玩家分配角色。

角色属性

定义角色时,必须指定下列信息。

  • 角色的名称。 名称必须为小写字母数字形式,且长度不超过 100 个字符。
  • 可担任该角色的玩家的最大数量。 该值必须大于零。
  • 应担任该角色的玩家的目标数量。 该值必须大于零,且小于或等于可以担任该角色的玩家的最大数量。

当玩家在会话中被分配到一个角色时,此信息会记录在多人游戏会话文档中。

服务会强制限制可分配该角色的玩家的最大人数,但不会强制要求目标数量。

创建角色

角色和角色类型通常在会话模板中定义;有关详细信息,请参阅多人游戏会话模板。 该服务支持在创建会话期间定义角色类型和角色,但 XSAPI 不支持。

在会话模板中定义角色类型和角色

在 Xbox 服务配置期间创建会话模板时,可以定义角色类型和角色。

有关角色类型和角色的信息可以通过使用以下格式在会话模板中被指定为一个基本级别 roleTypes 元素。

"roleTypes": {
  "myroletype1": { // Must be lowercase alphanumeric.
    "ownerManaged": true, // Can be true only on sessions that have the "hasOwners" capability set.
                          // If true, only the owner of the session can assign this role to players.
    "mutableRoleSettings": ["max", "target"], // Only these role settings can be modified during the
                                              // session. Exclude role settings to lock them.
    "roles": {
      "role1": { // Must be lowercase alphanumeric.
        "max": 3, // Maximum number of players assigned to this role. Enforced by MPSD.
        "target": 2 // Target number of players to assign this role to. Not enforced by MPSD.
      },
      "role2": {
        ...
      }
  },
  "myroletype2": {
    ...
  }
},

为多人游戏会话检索角色信息

可以从多人游戏会话或多人游戏搜索句柄中,获取有关角色类型、角色以及分配给每个角色的玩家数量的信息。

在 XSAPI 中,有关角色类型和角色的信息存储在数组结构内。

在从搜索请求返回的 XblMultiplayerSearchHandle 对象中,可以通过使用角色类型名称索引 XblMultiplayerSessionRoleTypes 数据来获取角色类型信息。

调用将返回一个 XblMultiplayerRoleType 对象。 若要获取有关角色的信息,请为数组 Roles 索引。

XblMultiplayerRole 对象包含有关此角色的信息,包括 MaxMemberCountMemberXuidsMemberCountTargetCount

向玩家分配角色

目前,XSAPI 中的玩家只能分配他们自己的角色。 若要指定当前玩家的角色类型和角色,请将 XblMultiplayerSessionHandle 对象传递到 XblMultiplayerSesionCurrentUserSetRoles 方法。

如果尝试将会话写入服务时,此角色已满,则 MPSD 将拒绝写入。