Egna assetformat och spelarskapelser på PlayDrop
Skapa ett eget assetformat med en asset spec, deklarera formaten spelet läser eller skriver och låt spelare spara och publicera skapelser med sdk.assets.custom.
Med asset specs kan ett spel definiera en egen sorts asset, som en bana, en karaktär eller en kortlek, som ett kontrakt av filer. Spelare kan sedan göra, spara och publicera skapelser i det formatet, och andra spel som stöder det kan öppna dem.
Definiera en asset spec
En asset spec deklareras i listan assetSpecs i catalogue.json, bredvid apps:
{
"assetSpecs": [{
"name": "moon-level",
"version": "1.0.0",
"displayName": "Moon Jump level",
"symbol": "specs/moon-level.svg",
"contract": "specs/moon-level.contract.json"
}]
}Kontraktet anger filerna i varje asset och hur de kontrolleras:
{
"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" }
]
}Roller kan ha ett JSON Schema, som PlayDrop kontrollerar vid varje sparning. Publicera en ny version av specen när formatet ändras; gamla assets behåller sin version.
Deklarera vad ett spel stöder
{
"assetSpecSupport": [
{ "assetSpec": "asset-spec:your-name/moon-level", "versionRange": "^1.0.0", "capabilities": ["READ", "WRITE"] }
]
}Förmågorna är READ, WRITE, EDIT, PREVIEW och IMPORT.
Spara och läs in spelarskapelser
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 }saveDraftsparar ett privat utkast;publishgör det offentligt. Båda kräver den kompletta uppsättningen filer.- Assetreferenser ser ut som
asset:creator/name@r2.loadJson,loadTextochdownloadFileläser publicerade assets;loadOwned,loadOwnedJsonochloadOwnedFileläser spelarens egna, inklusive utkast. supports(versionRef, capability)kontrollerar stödet innan en asset från en annan version öppnas.- Fel använder koder som
custom_asset_capability_unsupportedochcustom_asset_role_type_mismatch.
Spelare måste vara inloggade för att spara. Granska det som spelare publicerar på samma sätt som annat användarinnehåll: PlayDrops innehållspolicy gäller för det.
Det här accepterar connectorn
Egna assets och specar som bara består av data laddas upp som andra filer. Körbara modeller, alltså MODEL_3D-assets med underkategorin procedural eller formatet CUSTOM, avvisas av connectorn eftersom API:et inte kör skaparens kod; baka dem eller referera till en publicerad version. Se spelassets.