เวิลด์ เดต้า สตอเรจ
DataStorage ของ ZEPETO เป็นฐานข้อมูลระยะไกลที่เก็บและจัดการข้อมูลการเล่นเกมของผู้ใช้ตามแต่ละโลก
เหมาะสำหรับการเก็บข้อมูลการเล่นเกมของผู้ใช้ที่ต้องการการบำรุงรักษาหรือการอัปเดตในหลายเซสชันการเล่น เนื่องจากจะถูกเก็บและจัดการโดย UserID
จัดการข้อมูลการเล่นของผู้ใช้ของคุณโดยใช้ API ที่มีอยู่ในเซิร์ฟเวอร์ ZEPETO Multiplay
คุณสามารถดูและแก้ไขข้อมูลการเล่นเฉพาะของผู้ใช้ที่เก็บไว้ใน Data Storage จากเมนูการจัดการข้อมูลโลกใน ZEPETO Studio
📘 กรุณาอ้างอิงจากคู่มือต่อไปนี้ [การจัดการข้อมูลโลก]
API การจัดเก็บข้อมูล
📘 โปรดดูเอกสาร API ต่อไปนี้.ZEPETO.Multiplay.DataStorage API
- กรุณากรอกโค้ดเซิร์ฟเวอร์ index.ts Sandbox.
- ในเซิร์ฟเวอร์ท้องถิ่นในสภาพแวดล้อม Unity Editor ข้อมูลจะไม่ถูกเก็บรักษาเมื่อเซิร์ฟเวอร์ถูกปิดและเปิดใหม่อีกครั้ง.
- หลังจากการปรับใช้โลก ข้อมูลจะถูกเก็บใน ZEPETO DB และดูแลรักษา.
- ข้อมูลจะไม่ถูกบันทึกหากไม่เป็นไปตามกฎด้านล่างนี้:
- ไม่มีค่าที่ให้ไว้
- มีการป้อนค่าที่ไม่สามารถเก็บได้
- ข้อจำกัดในการจัดเก็บข้อมูล
- ข้อจำกัดความยาวของคีย์: 50 ตัวอักษร
- อนุญาตให้ใช้เฉพาะตัวอักษร ตัวเลข และขีดล่าง (_) ในคีย์
- จำนวนคีย์สูงสุด: 1000 ต่อ User ID
- ขนาดข้อมูลค่าที่สูงสุด: 500,000 ตัวอักษร
- โปรดทราบว่าข้อมูลค่าจะถูกจัดเก็บพร้อมกับตัวระบุภายในเมื่อจัดเก็บบนเซิร์ฟเวอร์จริง ใช้ด้วยความระมัดระวัง.
อ่าน / เขียน / ลบข้อมูลสำหรับคีย์เดียว
คุณสามารถอ่าน เขียน และลบข้อมูลสำหรับคีย์เดียวใน DataStorage ของผู้เล่นท้องถิ่นโดยใช้ DataStorage.get, DataStorage.set และ DataStorage.remove.
import { DataStorage } from 'ZEPETO.Multiplay.DataStorage';
export default class extends Sandbox {
//...
async onJoin(client: SandboxPlayer) {
// โหลด DataStorage ของผู้เล่นท้องถิ่น
const playerStorage: DataStorage = client.loadDataStorage();
// รับค่าที่เกี่ยวข้องกับคีย์ 'level'
let playerLevel = await playerStorage.get("level") as number;
if (playerLevel == null) {
playerLevel += 1;
}
// เก็บค่าที่เพิ่มขึ้น
await playerStorage.set("level", playerLevel);
// ลบข้อมูล
await playerStorage.remove("level");
}
}
อ่าน / เขียนข้อมูลสำหรับหลายคีย์
คุณสามารถอ่าน เขียน และลบข้อมูลสำหรับหลายคีย์ในพื้นที่จัดเก็บข้อมูลของผู้เล่นท้องถิ่นโดยใช้ DataStorage.mget และ DataStorage.mset.
import { DataStorage } from 'ZEPETO.Multiplay.DataStorage';
export default class extends Sandbox {
//...
async onJoin(client: SandboxPlayer) {
const storage = client.loadDataStorage();
// mset (multi key-value) store
const success = await storage.mset<number>([
{ key: 'key1', value: 1 },
{ key: 'key2', value: 2 }
]);
// หากสำเร็จ
if (success) {
// รับค่าของ key1 และ key2 พร้อมกัน
const keys = ['key1', 'key2'];
const keyValeus = await storage.mget(keys);
keys.forEach(key => {
const value = keyValeus[key];
console.log(value);
});
}
}
}
การจัดการข้อผิดพลาด
คุณสามารถดำเนินการจัดการที่เหมาะสมสำหรับข้อยกเว้นที่เกิดขึ้นเมื่อเรียกใช้ API DataStorage โดยอ้างอิงถึงประเภทข้อผิดพลาดที่กำหนดใน DataStorageError.
import { DataStorage } from 'ZEPETO.Multiplay.DataStorage';
export default class extends Sandbox {
//...
async onJoin(client: SandboxPlayer) {
// โหลดข้อมูลการจัดเก็บของผู้เล่นท้องถิ่น
const playerStorage: DataStorage = client.loadDataStorage();
try {
let playerLevel = await playerStorage.get("level") as number;
} catch (error) {
let systemError = (error as SystemError);
if (systemError.code === DataStorageError.Unknown || systemError.code === DataStorageError.NetworkError) {
// ข้อผิดพลาดของระบบหรือข้อผิดพลาดเครือข่าย
console.log(systemError.message);
} else if (systemError.code === DataStorageError.KeyConstraintViolated) {
// ข้อผิดพลาดการละเมิดข้อจำกัดของคีย์
console.log(systemError.message);
} else if (systemError.code === DataStorageError.ValueConstraintViolated) {
// ข้อผิดพลาดการละเมิดข้อจำกัดของค่า
console.log(systemError.message);
}
}
}
}
เข้าถึงการจัดเก็บข้อมูลโดยรหัสผู้ใช้
ยังสามารถเข้าถึงการจัดเก็บข้อมูลของผู้ใช้เฉพาะโดยใช้ UserID ผ่าน DataStorage.loadDataStorage, แทนที่จะเป็นการจัดเก็บข้อมูลของผู้เล่นในท้องถิ่น.
const userStorage: DataStorage = await loadDataStorage(userId);
👍 เคล็ดลับ