マルチプレイルームステート

マルチプレイルームは、接続されたプレイヤーまたはオブジェクトの位置を管理するためのStateプロパティを提供します。
Stateのデータ定義は、マルチプレイパッケージの下にあるスキーマファイルから管理されます。 onStateChangeイベントは、クライアントがルームへの接続を成功裏に確立したときに最初に呼び出され、その後、状態データに変更があるたびに呼び出されます。
サーバーAPI
API | 説明 |
|---|---|
state.SCHEMA_NAME | スキーマファイルで定義されたSCHEMA_NAMEフィールドにstateを使用してアクセスできます。 クライアントまたは内部サーバーロジックからのリクエストでフィールド値を変更できます。 変更された状態は、その後、OnStateChangeイベントを使用してクライアントに自動的に伝播されます。 |
📘 以下のガイドを参照してください。 [ZEPETO.Multiplay(Server) API]
import { Location } from 'ZEPETO.Multiplay.Schema';
export default class extends Sandbox {
...
const location: Location = this.state.playerLocation;
// 状態の処理。
...
}API | 説明 |
|---|---|
room.OnStateChange(State, isFirst) | ルームに参加するときに状態変更コールバックを登録できます。 最初にルーム全体の状態を受け取り、その後は変更された状態のみを受け取ります。 |
クライアントAPI
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 : スキーマタイプの定義
スキーマタイプはワールドで使用されるデータ構造です。インスペクタ → スキーマタイプで、[+]ボタンを押してデータを追加します。

ステップ 2 : ルームステートの追加
ルームステートはワールドルームの現在の状態を示すプロパティであり、上記で定義されたスキーマ構造で表現されます。
スキーマタイプの中から、ワールドの現在の状態として使用されるtypeRoom Stateを選択し、SCHEMA_NAMEとして設定します。

Schemas.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"}
}