Format aset kustom dan kreasi pemain di PlayDrop
Buat format aset sendiri, nyatakan format yang dibaca atau ditulis game, dan biarkan pemain menyimpan serta menerbitkan kreasi lewat sdk.assets.custom.
Spesifikasi aset memungkinkan game menentukan jenis asetnya sendiri, seperti level, karakter, atau dek, sebagai kontrak berkas. Pemain lalu bisa membuat, menyimpan, dan menerbitkan kreasi dalam format itu, dan game lain yang mendukungnya bisa membukanya.
Tentukan spesifikasi aset
Spesifikasi aset dideklarasikan di daftar assetSpecs di catalogue.json, di samping apps:
{
"assetSpecs": [{
"name": "moon-level",
"version": "1.0.0",
"displayName": "Moon Jump level",
"symbol": "specs/moon-level.svg",
"contract": "specs/moon-level.contract.json"
}]
}Kontrak menyebutkan berkas setiap aset dan cara memeriksanya:
{
"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" }
]
}Peran boleh membawa JSON Schema, yang diperiksa PlayDrop setiap kali disimpan. Terbitkan versi spesifikasi baru saat formatnya berubah; aset lama tetap memakai versinya.
Nyatakan apa yang didukung game
{
"assetSpecSupport": [
{ "assetSpec": "asset-spec:your-name/moon-level", "versionRange": "^1.0.0", "capabilities": ["READ", "WRITE"] }
]
}Kemampuan yang tersedia adalah READ, WRITE, EDIT, PREVIEW, dan IMPORT.
Simpan dan muat kreasi pemain
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 }saveDraftmenyimpan draf privat;publishmenjadikannya publik. Keduanya memerlukan set berkas yang lengkap.- Referensi aset berbentuk seperti
asset:creator/name@r2.loadJson,loadText, dandownloadFilemembaca aset yang sudah diterbitkan;loadOwned,loadOwnedJson, danloadOwnedFilemembaca aset milik pemain sendiri, termasuk draf. supports(versionRef, capability)memeriksa dukungan sebelum membuka aset dari versi lain.- Kesalahan memakai kode seperti
custom_asset_capability_unsupporteddancustom_asset_role_type_mismatch.
Pemain harus masuk untuk menyimpan. Tinjau apa yang diterbitkan pemain seperti Anda meninjau konten pengguna lainnya: kebijakan konten PlayDrop berlaku untuknya.
Apa yang diterima konektor
Aset dan spesifikasi kustom yang hanya berisi data diunggah seperti berkas lainnya. Model yang dapat dieksekusi, yaitu aset MODEL_3D dengan subkategori procedural atau format CUSTOM, ditolak oleh konektor karena API tidak menjalankan kode kreator; bake model tersebut atau rujuk versi yang sudah diterbitkan. Lihat aset game.