รูปแบบแอสเซ็ตที่กำหนดเองและผลงานของผู้เล่นบน PlayDrop
กำหนดรูปแบบแอสเซ็ตของคุณเองด้วยสเปกแอสเซ็ต ประกาศรูปแบบที่เกมอ่านหรือเขียน และให้ผู้เล่นบันทึกและเผยแพร่ผลงานด้วย sdk.assets.custom
สเปกแอสเซ็ตช่วยให้เกมกำหนดแอสเซ็ตชนิดของตัวเองได้ เช่น ด่าน ตัวละคร หรือสำรับการ์ด โดยเป็นข้อกำหนดของชุดไฟล์ จากนั้นผู้เล่นจะสร้าง บันทึก และเผยแพร่ผลงานในรูปแบบนั้นได้ และเกมอื่นที่รองรับก็เปิดผลงานเหล่านั้นได้
กำหนดสเปกแอสเซ็ต
สเปกแอสเซ็ตประกาศไว้ในรายการ assetSpecs ของ catalogue.json ข้างๆ apps:
{
"assetSpecs": [{
"name": "moon-level",
"version": "1.0.0",
"displayName": "Moon Jump level",
"symbol": "specs/moon-level.svg",
"contract": "specs/moon-level.contract.json"
}]
}ข้อกำหนดระบุไฟล์ของแต่ละแอสเซ็ตและวิธีตรวจสอบไฟล์เหล่านั้น:
{
"primaryRole": "level",
"roles": [
{ "name": "level", "required": true, "contentTypes": ["application/json"], "mode": "TEXT",
"jsonSchema": { "type": "object", "required": ["tiles"], "properties": { "tiles": { "type": "array" } } } },
{ "name": "thumbnail", "required": false, "contentTypes": ["image/png"], "mode": "BINARY" }
]
}บทบาทอาจมี JSON Schema ซึ่ง PlayDrop จะตรวจสอบทุกครั้งที่บันทึก เผยแพร่สเปกเวอร์ชันใหม่เมื่อรูปแบบเปลี่ยน แอสเซ็ตเก่าจะคงเวอร์ชันเดิมไว้
ประกาศสิ่งที่เกมรองรับ
{
"assetSpecSupport": [
{ "assetSpec": "asset-spec:your-name/moon-level", "versionRange": "^1.0.0", "capabilities": ["READ", "WRITE"] }
]
}ความสามารถที่ใช้ได้คือ READ, WRITE, EDIT, PREVIEW และ IMPORT
บันทึกและโหลดผลงานของผู้เล่น
const levels = sdk.assets.custom.forSpec("asset-spec:your-name/moon-level");
await levels.saveDraft({ assetName: "crater-run", displayName: "Crater run",
files: { level: new Blob([JSON.stringify(level)], { type: "application/json" }) } });
await levels.publish({ assetName: "crater-run", displayName: "Crater run", files: { level: levelBlob, thumbnail: pngBlob } });
const mine = await levels.listMine();
const latest = mine[0]?.latestPublicVersion;
if (latest) startLevel(await levels.loadJson({ assetRef: latest.assetRef, role: "level" }));
const community = await levels.listPublic({ limit: 20 }); // { assets, pagination }saveDraftเก็บฉบับร่างส่วนตัว ส่วนpublishทำให้เป็นสาธารณะ ทั้งสองอย่างต้องใช้ไฟล์ครบชุด- การอ้างอิงแอสเซ็ตมีหน้าตาแบบ
asset:creator/name@r2โดยloadJson,loadTextและdownloadFileอ่านแอสเซ็ตที่เผยแพร่แล้ว ส่วนloadOwned,loadOwnedJsonและloadOwnedFileอ่านแอสเซ็ตของผู้เล่นเอง รวมถึงฉบับร่าง supports(versionRef, capability)ตรวจสอบก่อนเปิดแอสเซ็ตจากเวอร์ชันอื่น- ข้อผิดพลาดใช้รหัสอย่าง
custom_asset_capability_unsupportedและcustom_asset_role_type_mismatch
ผู้เล่นต้องเข้าสู่ระบบจึงจะบันทึกได้ ตรวจสอบสิ่งที่ผู้เล่นเผยแพร่เหมือนที่คุณตรวจสอบเนื้อหาจากผู้ใช้อื่นๆ: นโยบายเนื้อหาของ PlayDrop มีผลกับเนื้อหาเหล่านั้นด้วย
สิ่งที่คอนเนกเตอร์รับ
แอสเซ็ตและสเปกที่กำหนดเองซึ่งมีแต่ข้อมูลอัปโหลดได้เหมือนไฟล์อื่น ส่วนโมเดลที่รันโค้ดได้ คือแอสเซ็ต MODEL_3D ที่มีหมวดย่อย procedural หรือรูปแบบ CUSTOM จะถูกคอนเนกเตอร์ปฏิเสธ เพราะ API ไม่รันโค้ดของครีเอเตอร์ ให้แปลงเป็นไฟล์สำเร็จรูปหรืออ้างอิงเวอร์ชันที่เผยแพร่แล้ว ดูแอสเซ็ตเกม