Eigene Asset-Formate und Spielerkreationen auf PlayDrop
Eigenes Asset-Format definieren, unterstützte Formate angeben und Spieler Level, Figuren und mehr mit sdk.assets.custom speichern und veröffentlichen lassen.
Mit Asset-Spezifikationen kann ein Spiel eine eigene Art von Asset definieren, etwa ein Level, eine Figur oder ein Kartendeck, als Vertrag über Dateien. Spieler können dann Kreationen in diesem Format erstellen, speichern und veröffentlichen, und andere Spiele, die das Format unterstützen, können sie öffnen.
Asset-Spezifikation definieren
Eine Asset-Spezifikation wird in der Liste assetSpecs der catalogue.json deklariert, neben apps:
{
"assetSpecs": [{
"name": "moon-level",
"version": "1.0.0",
"displayName": "Moon Jump level",
"symbol": "specs/moon-level.svg",
"contract": "specs/moon-level.contract.json"
}]
}Der Vertrag benennt die Dateien jedes Assets und legt fest, wie sie geprüft werden:
{
"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" }
]
}Rollen können ein JSON Schema enthalten, das PlayDrop bei jedem Speichern prüft. Veröffentliche eine neue Version der Spezifikation, wenn sich das Format ändert; alte Assets behalten ihre Version.
Angeben, was ein Spiel unterstützt
{
"assetSpecSupport": [
{ "assetSpec": "asset-spec:your-name/moon-level", "versionRange": "^1.0.0", "capabilities": ["READ", "WRITE"] }
]
}Die möglichen Fähigkeiten sind READ, WRITE, EDIT, PREVIEW und IMPORT.
Spielerkreationen speichern und laden
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 }saveDraftspeichert einen privaten Entwurf;publishmacht ihn öffentlich. Beide brauchen den vollständigen Satz an Dateien.- Asset-Referenzen sehen so aus:
asset:creator/name@r2.loadJson,loadTextunddownloadFilelesen veröffentlichte Assets;loadOwned,loadOwnedJsonundloadOwnedFilelesen die eigenen Assets des Spielers, Entwürfe eingeschlossen. supports(versionRef, capability)prüft vorab, bevor ein Asset aus einer anderen Version geöffnet wird.- Fehler verwenden Codes wie
custom_asset_capability_unsupportedundcustom_asset_role_type_mismatch.
Spieler müssen angemeldet sein, um zu speichern. Prüfe, was Spieler veröffentlichen, so wie du alle Inhalte von Nutzern prüfen würdest: Die Inhaltsrichtlinie von PlayDrop gilt auch dafür.
Was der Connector annimmt
Eigene Assets und Spezifikationen, die nur aus Daten bestehen, werden wie andere Dateien hochgeladen. Ausführbare Modelle, also MODEL_3D-Assets mit der Unterkategorie procedural oder dem Format CUSTOM, lehnt der Connector ab, weil die API keinen Creator-Code ausführt; backe sie vorab oder verweise auf eine veröffentlichte Version. Siehe Spiel-Assets.