Egendefinerte ressursformater og spillerkreasjoner på PlayDrop
Lag et eget ressursformat med en spesifikasjon, deklarer formatene spillet leser eller skriver, og la spillere lagre og publisere kreasjoner med sdk.assets.custom.
Ressursspesifikasjoner lar et spill definere sin egen type ressurs, for eksempel et brett, en figur eller en kortstokk, som en kontrakt av filer. Spillere kan deretter lage, lagre og publisere kreasjoner i det formatet, og andre spill som støtter det, kan åpne dem.
Definer en ressursspesifikasjon
En ressursspesifikasjon deklareres i assetSpecs-listen i catalogue.json, ved siden av apps:
{
"assetSpecs": [{
"name": "moon-level",
"version": "1.0.0",
"displayName": "Moon Jump level",
"symbol": "specs/moon-level.svg",
"contract": "specs/moon-level.contract.json"
}]
}Kontrakten navngir filene i hver ressurs og hvordan de skal sjekkes:
{
"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 et JSON Schema, som PlayDrop sjekker ved hver lagring. Publiser en ny versjon av spesifikasjonen når formatet endres; gamle ressurser beholder sin versjon.
Deklarer hva et spill støtter
{
"assetSpecSupport": [
{ "assetSpec": "asset-spec:your-name/moon-level", "versionRange": "^1.0.0", "capabilities": ["READ", "WRITE"] }
]
}Funksjonene er READ, WRITE, EDIT, PREVIEW og IMPORT.
Lagre og last inn spillerkreasjoner
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 }saveDraftlagrer et privat utkast;publishgjør det offentlig. Begge trenger hele settet med filer.- Ressursreferanser ser ut som
asset:creator/name@r2.loadJson,loadTextogdownloadFileleser publiserte ressurser;loadOwned,loadOwnedJsonogloadOwnedFileleser spillerens egne, inkludert utkast. supports(versionRef, capability)sjekker før du åpner en ressurs fra en annen versjon.- Feil bruker koder som
custom_asset_capability_unsupportedogcustom_asset_role_type_mismatch.
Spillere må være logget inn for å lagre. Se over det spillere publiserer, på samme måte som du ville gjort med annet brukerinnhold: PlayDrops innholdsregler gjelder for det.
Hva connectoren godtar
Egendefinerte ressurser og spesifikasjoner som bare inneholder data, lastes opp som andre filer. Kjørbare modeller, det vil si MODEL_3D-ressurser med underkategorien procedural eller formatet CUSTOM, avvises av connectoren fordi API-et ikke kjører kode fra skapere; bak dem til faste modeller eller referer til en publisert versjon. Se spillressurser.