---
title: マルチプレイルームステート
slug: world-sdk-guide-ja/IrqHKEqXdqWW7umq4F3R3
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-3_eY_aqy3ZYnl0QFBrYaw-20240904-102420.png)

マルチプレイルームは、接続されたプレイヤーまたはオブジェクトの位置を管理するためのStateプロパティを提供します。

Stateのデータ定義は、マルチプレイパッケージの下にあるスキーマファイルから管理されます。
onStateChangeイベントは、クライアントがルームへの接続を成功裏に確立したときに最初に呼び出され、その後、状態データに変更があるたびに呼び出されます。



## サーバーAPI

| **API**            | **説明**                                                                                                                                                                     |
| ------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| state.SCHEMA\_NAME | スキーマファイルで定義されたSCHEMA\_NAMEフィールドにstateを使用してアクセスできます。<br /><br />クライアントまたは内部サーバーロジックからのリクエストでフィールド値を変更できます。<br /><br />変更された状態は、その後、OnStateChangeイベントを使用してクライアントに自動的に伝播されます。 |

:::hint{type="info"}
**📘&#x20;**&#x4EE5;下のガイドを参照してください。 \[[ZEPETO.Multiplay(Server) API](https://developer.zepeto.me/docs/multiplay-server/classes/ZEPETO_Multiplay.Sandbox#state)]
:::

```typescript
import { Location } from 'ZEPETO.Multiplay.Schema';

export default class extends Sandbox {
 
   ...
   const location: Location = this.state.playerLocation;
   // 状態の処理。
   ...
}
```

| **API**                            | **説明**                                                                          |
| ---------------------------------- | ------------------------------------------------------------------------------- |
| room.OnStateChange(State, isFirst) | ルームに参加するときに状態変更コールバックを登録できます。<br /><br />最初にルーム全体の状態を受け取り、その後は変更された状態のみを受け取ります。 |

## クライアントAPI

```typescript
import { ZepetoScriptBehaviour } from 'ZEPETO.Script';
import { Location } from 'ZEPETO.Multiplay.Schema';

export default class SampleClient extends ZepetoScriptBehaviour {

    Start() {
        this.multiplay.RoomJoined += (room: Room) => {
            room.OnStateChange += this.OnStateChange;
        };
    }

    private OnStateChange(state: State, isFirst: boolean) {
        const location: Location = state.playerLocation;
        // 更新された状態を使用してプレイヤーの位置を処理します。  
    }
}
```



## スキーマファイルの定義

スキーマは、ルーム内の現在の状態を定義するためのデータ構造です。ルームは主にプレイヤー情報、プレイヤーまたはオブジェクトの位置などを管理するために使用されます。

スキーマを編集するには、プロジェクトビュー → MultiplayPackageアセット → schema.jsonを選択し、インスペクタウィンドウでワールドに使用するデータ型を変更します。
インスペクタウィンドウでワールドに使用するデータ型を変更できます。

## ステップ 1 : スキーマタイプの定義

スキーマタイプはワールドで使用されるデータ構造です。インスペクタ → スキーマタイプで、\[+]ボタンを押してデータを追加します。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-Hbuk57mwqKHFvEmG_-Wf0-20240904-102429.gif "4-4-3-1.gif")



## ステップ 2 : ルームステートの追加

ルームステートはワールドルームの現在の状態を示すプロパティであり、上記で定義されたスキーマ構造で表現されます。

スキーマタイプの中から、ワールドの現在の状態として使用されるtypeRoom Stateを選択し、SCHEMA\_NAMEとして設定します。

![](https://api.archbee.com/api/optimize/fCt3n1oCa8rgNJ8fw9I2N-2ClXYyRzwj0OspO1NGGm0-20240904-102425.gif)

### Schemas.jsonの例

```json
{
"State" : {"players" : {"map" : "Player"}},
"Player" : {"sessionId" : "string","zepetoUserId" : "string","transform" : "Transform","state" : "number","subState" : "number"},
"Transform" : {"position" : "Vector3","rotation" : "Vector3"},
"Vector3" : {"x" : "number","y" : "number","z" : "number"}
}
```

