---
title: สถานะห้องเล่นหลายคน
slug: world-sdk-guide-th/aQ9gU_FDUguq2wz42DNMO
docTags: 
createdAt: 2024-09-02T08:34:13.135Z
---

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

ห้องมัลติเพลย์ให้คุณสมบัติ State สำหรับการจัดการตำแหน่งของผู้เล่นหรือวัตถุที่เชื่อมต่ออยู่

การกำหนดข้อมูลของ State จะถูกจัดการจากไฟล์ Schema ซึ่งอยู่ภายใต้แพ็คเกจมัลติเพลย์
เหตุการณ์ onStateChange จะถูกเรียกครั้งแรกเมื่อไคลเอนต์เชื่อมต่อกับห้องได้สำเร็จ และจะถูกเรียกอีกครั้งเมื่อมีการเปลี่ยนแปลงข้อมูลสถานะ



## API เซิร์ฟเวอร์

| **API**            | **คำอธิบาย**                                                                                                                                                                                                                                      |
| ------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| state.SCHEMA\_NAME | คุณสามารถเข้าถึงฟิลด์ SCHEMA\_NAME ที่กำหนดในไฟล์ schema ด้วย state<br /><br />คุณสามารถแก้ไขค่าฟิลด์ตามคำขอจากไคลเอนต์หรือจากตรรกะเซิร์ฟเวอร์ภายใน<br /><br />สถานะที่เปลี่ยนแปลงจะถูกส่งต่อไปยังไคลเอนต์โดยอัตโนมัติด้วยเหตุการณ์ OnStateChange |

:::hint{type="info"}
**📘&#x20;**&#xE01;รุณาอ้างอิงจากคู่มือต่อไปนี้ \[[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) | คุณสามารถลงทะเบียน callback การเปลี่ยนแปลงสถานะเมื่อคุณเข้าร่วมห้อง<br /><br />คุณสามารถรับสถานะของห้องทั้งหมดเป็นครั้งแรก และจะได้รับเฉพาะสถานะที่เปลี่ยนแปลงเท่านั้นในภายหลัง. |

## Client 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;
        // Handling player location using updated State.  
    }
}
```



## กำหนดไฟล์ Schema

Schema เป็นโครงสร้างข้อมูลสำหรับการกำหนดสถานะปัจจุบันในห้อง ห้องถูกใช้เพื่อจัดการข้อมูลผู้เล่น ตำแหน่งของผู้เล่นหรือวัตถุ เป็นต้น

ในการแก้ไขสคีมา คุณสามารถเลือก Project View → MultiplayPackage Asset → schema.json และจากนั้นปรับเปลี่ยนประเภทข้อมูลที่ใช้สำหรับโลกในหน้าต่าง Inspector
คุณสามารถปรับเปลี่ยนประเภทข้อมูลที่ใช้สำหรับโลกในหน้าต่าง Inspector ได้

## ขั้นตอนที่ 1 : การกำหนดประเภทสคีมา

ประเภทสคีมาเป็นโครงสร้างข้อมูลที่ใช้ในโลก ใน Inspector → ประเภทสคีมา กดปุ่ม \[+] และเพิ่มข้อมูล

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



## ขั้นตอนที่ 2 : เพิ่มสถานะห้อง

สถานะห้องคือคุณสมบัติที่แสดงสถานะปัจจุบันของห้องโลก และแสดงในโครงสร้างสคีมาตามที่กำหนดไว้ข้างต้น

ในประเภทสคีมา ให้เลือกประเภทสถานะห้องที่ใช้เป็นสถานะปัจจุบันของโลกและตั้งชื่อเป็น 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"}
}
```

