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

# Multiplayer ロール

> XBOX マルチプレイヤー セッションでプレイヤー ロールを定義し、スロットを予約して、サービスがロールの割り当てを追跡し、ゲームプレイ ロールごとの最大数を強制するようにします。

このトピックでは、XBOX services マルチプレイヤーでプレイヤー ロールを定義する方法について説明します。一部のゲーム セッションでは、サポート、メディック、アサルトなどのゲームプレイ ロールを特定のプレイヤーに割り当てたい場合があります。特定のゲームプレイ ロールを埋めることができるプレイヤー用にゲーム スロットを予約したい場合もあります。

XBOX services ロール機能を使用すると、サービスは、各ゲームプレイ ロールに割り当てられているプレイヤーを追跡し、特定のゲームプレイ ロールを選択できるプレイヤーの最大数を強制できます。

ロールの最も一般的な使用法は、ゲーム セッションに対してゲーム固有のロールを決定することです。たとえば、1 つまたは 2 つのサポート クラス、少なくとも 1 つのタンク/ヘビー クラス、そして 5 つを超えないアサルト クラスを必要とするゲーム モードを設定できます。

別の可能なシナリオでは、ゲーム セッションに正確に 4 人のゲーム プレイヤー、最大 8 人の観戦者、そして正確に 1 人のアナウンサーが存在できるように指定したい場合があります。

また、セッション ブラウズなど、他の手段で残りのスロットを埋めながら、友達用にスロットを予約するためにロールを使用することもできます。

## ロール タイプ

*ロール タイプ* は、ロール定義のグループを表します。各ロールは、ロール タイプの一部として定義される必要があります。ロール タイプは、マルチプレイヤー セッション ドキュメントで定義されます。

プレイヤーには、1 つのロール タイプから 1 つのロールのみを割り当てることができます。たとえば、「クラス」ロール タイプにヒーラー、タンク、ダメージが含まれる場合、プレイヤーはそれらのロールのうち 1 つだけに割り当てることができます。

複数のロール タイプを定義でき、プレイヤーは各ロール タイプから 1 つのロールを割り当てることができます。前のシナリオでは、ヒーラー ロールを選択したプレイヤーは、分隊長ロールが別のロール タイプで定義されている場合、分隊長ロールを割り当てることもできます。

## ロール タイプのプロパティ

ロール タイプを定義する際は、次の情報を指定する必要があります。

* ロール タイプの名前。名前は小文字の英数字であり、100 文字以下である必要があります。
* ロールの定義。
* ロールがオーナー管理されているかどうか。
* セッションの存続期間中にロールのプロパティを変更できるかどうか。

ロール タイプがオーナー管理されている場合、セッションのオーナーであるプレイヤーのみがその型のロールを割り当てることができます。ロール タイプがオーナー管理されていない場合、プレイヤーは自分自身にロールを割り当てることができます。

ロール タイプをオーナー管理として指定できるのは、`hasOwners` 機能が設定されているセッションのみです。

<Note>XBOX Services API (XSAPI) は現在、オーナーが他のプレイヤーにロールを割り当てることをサポートしていません。</Note>

## ロールのプロパティ

ロールを定義する際は、次の情報を指定する必要があります。

* ロールの名前。名前は小文字の英数字であり、100 文字以下である必要があります。
* ロールを埋めることができるプレイヤーの最大数。値はゼロより大きい必要があります。
* ロールを埋めるべきプレイヤーの目標数。値はゼロより大きく、そのロールを埋めることができるプレイヤーの最大数以下である必要があります。

プレイヤーにセッションでロールが割り当てられると、前述の情報がマルチプレイヤー セッション ドキュメントに記録されます。

サービスは、ロールに割り当てることができるプレイヤーの最大数は強制しますが、目標数は強制しません。

## ロールの作成

ロールとロール タイプは通常、セッション テンプレートで定義されます。詳細については、[Multiplayer セッション テンプレート](/services/xbox-services/multiplayer/mpsd/concepts/live-session-templates) を参照してください。サービスはセッション作成中のロール タイプとロールの定義をサポートしていますが、XSAPI はサポートしていません。

### セッション テンプレートでロール タイプとロールを定義する

XBOX services 構成中にセッション テンプレートを作成する際にロール タイプとロールを定義できます。

ロール タイプとロールに関する情報は、次の形式を使用してセッション テンプレートの基本レベルの `roleTypes` 要素として指定されます。

```json theme={null}
"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](/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionroletypes) データをインデックス化することにより、ロール タイプに関する情報を取得できます。

この呼び出しは、[XblMultiplayerRoleType](/reference/live/xsapi-c/multiplayer_c/structs/xblmultiplayerroletype) オブジェクトを返します。ロールに関する情報を取得するには、`Roles` 配列をインデックス化します。

[XblMultiplayerRole](/reference/live/xsapi-c/multiplayer_c/structs/xblmultiplayerrole) オブジェクトには、`MaxMemberCount`、`MemberXuids`、`MemberCount`、および `TargetCount` を含む、ロールに関する情報が含まれています。

## プレイヤーにロールを割り当てる

現在、プレイヤーは XSAPI で自分自身のロールのみを割り当てることができます。現在のプレイヤーのロール タイプとロールを指定するには、`XblMultiplayerSessionHandle` オブジェクトを [XblMultiplayerSessionCurrentUserSetRoles](/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessioncurrentusersetroles) メソッドに渡します。

セッションをサービスに書き込もうとする際に、ロールが既に満杯になっている場合、MPSD は書き込みを拒否します。


## Related topics

- [Multiplayer Session History Viewer ツール](/ja-jp/tools/tools-services/live-mp-session-history-viewer.md)
- [PlayFab ユーザー ロール](/ja-jp/services/playfab/identity/dev-identity/permissions/playfab-user-roles.md)
- [Game Saves ロールバック](/ja-jp/services/playfab/player-progression/game-saves/rollback.md)
- [Using multiple PlayFab Party networks](/ja-jp/services/playfab/multiplayer/networking/concepts-multiple-networks.md)
- [タッチ コントロール レイアウトの構築](/ja-jp/build/core-features/common/game-streaming/building-touch-layouts/game-streaming-touch-building-touch-layout.md)
