
Dieses Tutorial führt Sie durch eine kleine JEV-Integration: Ein NPC empfängt einen kompakten Game State, wählt eine zulässige Aktion aus und führt diese Aktion über gewöhnlichen Spielcode aus. Das Beispiel ist bewusst bescheiden. Ein zuverlässiger NPC mit drei Aktionen lehrt mehr als ein großer Agent, dessen Zustand, Autorität und fallback Verhalten unklar sind.
Die API-Namen und SDK-Details können je nach Integration variieren. Der architektonische Vertrag bleibt derselbe: Das Spiel besitzt die Wahrheit, JEV wählt aus rechtlichen Optionen aus und der Ausführer validiert den Choice, bevor er die Welt verändert.
Die kleinste nützliche Integration
Verwenden Sie fünf Teile: einen autoritativen Game State, eine staatliche Projektion, einen Builder für rechtliche Schritte, einen JEV-Client und einen Aktionsausführenden. Die Zustandsprojektion entfernt irrelevante Details. Der Action Builder fügt aktuelle Vorbedingungen hinzu. Der Client sendet eine Entscheidungsanfrage. Der Ausführende prüft, ob die Antwort noch gültig ist und übersetzt sie in Bewegungs-, Fähigkeits- oder Animationsbefehle.
game state -> state projection -> JEV decision -> validation -> executor -> game state
In Unity können diese Teile über einen MonoBehaviour, einen Gameplay-Dienst und eine Befehlskomponente verteilt sein. In Unreal können sie einem Akteur oder Massenprozessor, einem Subsystem und Gameplay-Fähigkeiten oder Verhaltensbaumaufgaben zugeordnet werden. Die Namen unterscheiden sich, aber die Eigentumsgrenze sollte explizit bleiben.
Schritt 1: Entwerfen Sie ein kompaktes Game State
Beginnen Sie mit Fakten, die die nächste Entscheidung ändern können. Für einen Kampf NPC könnten das Rolle, Gesundheitsverhältnis, sichtbare Feinde, nächste Deckung, Gesundheit des Verbündeten, Zielstatus, Munition, Abklingzeiten, aktuelle Aktion und eine monotone Zustandsversion sein. Vermeiden Sie es, rohe Engine-Objekte oder die ganze Welt zu senden. Ein kompaktes Schema lässt sich einfacher prüfen, übertragen und wiedergeben.
{ agentId: 'guard-07', role: 'defender', healthRatio: 0.42, objectiveUnderThreat: true, visibleThreats: 1, ammo: 3, healReady: true, stateVersion: 1842 }
Geben Sie nur Informationen an, die der NPC kennen darf. Dies ist besonders wichtig für Stealth- und Wettkampfspiele: Ein Entscheidungsmodell sollte keine versteckten feindlichen Positionen erhalten, nur weil der Server sie hat.
Schritt 2: Definieren Sie Legal Actions
Eine Aktion sollte einen stabilen Namen, explizite Parameter, Vorbedingungen und einen Ausführungspfad haben. Für das Beispiel NPC könnte der Satz sein: holdPosition, takeCover, attack und retreat. Wenn die Munition Null ist, sollte attack nicht gesendet werden. Wenn keine sichere Deckung besteht, sollte takeCover nicht gesendet werden.
[ { name: 'takeCover', coverId: 'wall-a' }, { name: 'attack', targetId: 'raider-02' }, { name: 'holdPosition', locationId: 'relay' } ]
Halten Sie das Aktionsvokabular zunächst klein. Das Ziel besteht nicht darin, jeden Tastendruck zu kodieren. Das Ziel besteht darin, sinnvolle taktische Choices offenzulegen und die Ausführung auf niedriger Ebene der Engine zu überlassen.
Schritt 3: Rufen Sie JEV
an
const decision = await jev.decide({ agent: npc, gameState: projectState(state), legalActions: buildLegalActions(state), objective: 'Protect the relay', stateVersion: state.version });
const decision = await jev.decide({ agent: npc, gameState: projectState(state), legalActions: buildLegalActions(state), objective: 'Protect the relay', stateVersion: state.version });
Lassen Sie eine verspätete Antwort nicht blind zutreffen. Die Welt könnte sich verändert haben, während die Anfrage im Umlauf war. Vergleichen Sie die Statusversion der Antwort mit der aktuellen Version und validieren Sie dann die ausgewählte Aktion erneut.
Schritt 4: Ausführen und Validieren
const action = legalActions.find(candidate => candidate.name === decision.name);
if (!action || !matchesParameters(action, decision)) return fallback(state);
return executor.run(action);
const action = legalActions.find(candidate => candidate.name === decision.name); if (!action || !matchesParameters(action, decision)) return fallback(state); return executor.run(action);
Die Validierung sollte auch dann erfolgen, wenn der Dienst vertrauenswürdig ist. Es schützt vor veraltetem Status, Rennbedingungen, Schemadrift und versehentlicher Modellausgabe, die nicht mit dem Spielvertrag übereinstimmt.
Schritt 5: Entscheidungshäufigkeit festlegen
Wählen Sie eine Kadenz basierend auf der Entscheidung, nicht der Renderschleife. Ein rundenbasierter NPC kann zu Beginn seines Zuges entscheiden. Ein Echtzeit-Kämpfer kann entscheiden, wann seine aktuelle Absicht abgeschlossen ist, wann eine Bedrohung in die Wahrnehmung eintritt oder nach einem budgetierten Timer, beispielsweise alle paar hundert Millisekunden. Vermeiden Sie überlappende Anfragen für denselben Agenten, es sei denn, das System unterstützt explizit Stornierung und Bestellung.
Verwenden Sie eine lokal erstellte Richtlinie für sofortige Reaktionen, die nicht warten können, z. B. das Anhalten vor einer Kollision oder die Berücksichtigung einer serverseitigen Betäubung. JEV sollte sinnvolle taktische Choices behandeln, nicht jede Sicherheitsüberprüfung.
Schritt 6: Behandeln Sie Latenz, Timeout und fallback
- Jede Anfrage benötigt eine Frist. Wenn die Frist abläuft, behalten Sie den NPC in einer sicheren aktuellen Aktion bei oder verwenden Sie einen deterministischen fallback. Ein fallback kann so einfach sein wie Position halten, in Deckung gehen, der letzten gültigen Absicht folgen oder einen erstellten Verhaltensbaum ausführen. Wählen Sie es je nach Rolle und Situation aus.Timeout:
- Brechen Sie die Anfrage ab oder ignorieren Sie sie und verwenden Sie die fallback.Ungültige Aktion:
- Vertragsfehler protokollieren, Status neu erstellen und einen Safe verwenden Policy.Veralteter Status:
- Das Ergebnis verwerfen oder nur die verbleibenden Aktionen erneut validieren sicher.Dienstfehler:
- auf lokales Verhalten herabsetzen, ohne das Spiel zu blockieren Schleife.Wiederholter Fehler:
Backoff und Oberflächentelemetrie anwenden, anstatt es jedes Mal erneut zu versuchen Rahmen.
Schritt 7: Testen Sie die Entscheidungsschicht
Zeichnen Sie die Zustandsprojektion, Legal Actions, Antwort, Validierungsergebnis, Ausführungsergebnis, Latenz und fallback Grund auf. Erstellen Sie Wiederholungsfälle für niedrige Gesundheit, fehlende Munition, mehrere Bedrohungen, verlorene Ziele, unterbrochene Aktionen und nicht verfügbare Navigation. Ein Entscheidungssystem lässt sich viel einfacher ausbalancieren, wenn ein Designer genau die Situation nachstellen kann, die zu einem unerwarteten Choice.
geführt hat.
- Für Unity- und Unreal-Integrationen sollten Sie den Engine-Adapter dünn halten. Der Adapter sollte den Engine-Status in den JEV-Vertrag übersetzen und eine validierte Aktion zurück in ein vorhandenes Befehls- oder Fähigkeitssystem übersetzen. Dadurch können die Kernentscheidungstests ausgeführt werden, ohne dass ein vollständiges Level geladen werden muss.
- Produktionscheckliste
- Game State enthält nur relevante und zulässige Informationen.
- Jede rechtliche Maßnahme hat Voraussetzungen und einen Eigentümer, der sie ausführen kann it.
- Antworten werden anhand des aktuellen maßgeblichen Status validiert.
- Anfragen haben Fristen, Stornierungs- oder Verjährungsregeln und Backoff.
- fallback Verhalten ist für jede NPC Rolle konzipiert.
Replay Protokolle machen schlechte Entscheidungen reproduzierbar.Latenz, Gültigkeit, Aktionsqualität und fallback Rate werden separat überwacht.Für das zugrunde liegende Konzept lesen Sie Was ist JEV?. Informationen zur Spielschleife und zum Designkontext NPC finden Sie unter


