
Dieses Unity-Tutorial verwendet JEV als begrenzte taktische Entscheidungsebene, während Unity für den Szenenzustand, die Physik, die Navigation, die Animation und die Gameplay-Autorität verantwortlich bleibt. Es handelt sich um ein Adaptermuster und nicht um die Behauptung, dass ein SDK-Aufruf einen NPC-Controller ersetzen kann.
Die Unity Architektur
Fünf Komponenten trennen: Ein Zustandsprojektor liest die Szene, ein Aktionsersteller erstellt Legal Actions, ein JEV-Client sendet die Anfrage, ein Ausführender ordnet eine validierte Aktion Unity Systemen zu und eine fallback-Richtlinie hält den NPC in Bewegung, wenn die Antwort verspätet oder ungültig ist.
NpcController -> StateProjector -> LegalActionBuilder -> JevClient -> Validator -> Executor or Fallback1. Projizieren Sie die Szene in Game State
Nur entscheidungsrelevante Fakten zum Projekt: Rolle, Gesundheit, sichtbare Feinde, Zielstatus, Deckung in der Nähe, Munition, Abklingzeiten, aktuelle Absicht und eine Statusversion. Nutzen Sie die Wahrnehmungsebene des NPC, damit verborgene Informationen nicht in die Entscheidung einfließen.
state = { agentId, role, healthRatio, visibleThreatIds, objectiveUnderThreat, ammo, stateVersion }2. Bauen Sie Legal Actions
Der Action Builder erstellt Befehle wie „In Deckung gehen“, ein sichtbares Ziel angreifen, einem Verbündeten helfen oder „Position halten“. Jede Aktion trägt die vom Ausführenden benötigte Ziel- oder Standortkennung. Die Navigation bleibt ein Unity Problem: JEV wählt Absichts- oder Zielkandidaten aus, während NavMesh den Pfad berechnet.
3. Aufruf außerhalb der Renderschleife
Lösen Sie eine Entscheidung aus, wenn die aktuelle Absicht abgeschlossen ist, eine Bedrohung wahrgenommen wird, sich das Ziel ändert oder ein taktischer Timer abläuft. Verwenden Sie eine Coroutine, eine asynchrone Aufgabe oder einen Gameplay-Dienst mit einer In-Flight-Anfrage pro NPC. Blockieren Sie niemals den Hauptthread von Unity, der auf die Netzwerkantwort wartet.
if (!requestInFlight) { requestInFlight = true; result = await client.Decide(snapshot, actions); ApplyIfStillValid(result); }4. Validieren und ausführen
Vergleichen Sie die Statusversion der Antwort mit der aktuellen Welt, erstellen Sie den rechtlichen Aktionssatz neu und überprüfen Sie die Parameter. Möglicherweise ist ein Ziel gestorben oder ein Deckungspunkt war möglicherweise nicht erreichbar, während die Anfrage ausgeführt wurde. Wenn die Validierung erfolgreich ist, ordnen Sie die Absicht einem vorhandenen Befehl, Verhaltensbaum, NavMesh Ziel oder Fähigkeitssystem zu.
5. Legen Sie Kadenz, Timeout und fallback
fest.
Trennen Sie die Renderschleife von der taktischen Schleife. Legen Sie eine Frist fest, die NPC Zeit zum Handeln lässt. Behalten Sie bei einer Zeitüberschreitung die aktuelle Sicherheitsabsicht bei oder wenden Sie eine lokale Richtlinie an, z. B. in Deckung gehen, wenn Sie verwundet sind, das Ziel halten oder sich zurückziehen, wenn kein legaler Angriff mehr verbleibt.
6. Entscheidungen sichtbar machen
In Entwicklungs-Builds können Sie den projizierten Status, Legal Actions, die ausgewählte Aktion, die Statusversion, die Anforderungslatenz, das Validierungsergebnis und den Grund fallback in einem Debug-Fenster oder Gizmo verfügbar machen. Designer sollten eine Entscheidung verstehen, ohne einen Netzwerk-Trace zu lesen.
- Unity Checkliste
- Perception besitzt die Zustandsprojektion.
- Blockieren Sie die Hauptprojektion nicht Thread.
- Vor der Ausführung erneut validieren.
- Bewegung, Physik, Animation und Autorität beibehalten Unity.
Schiffsdeterministisch fallback und Telemetrie von Anfang an Prototyp.
Ein minimaler Unity Szenenaufbau
Beginnen Sie mit einem NPC, einem Ziel, zwei Bedrohungen, ein paar Deckungspunkten und einem lokalen fallback Controller. Fügen Sie eine Wahrnehmungskomponente, einen Zustandsprojektor, einen Action Builder, einen Entscheidungsclient und einen Executor als separate MonoBehaviours oder Dienste hinzu. Halten Sie den Adapter JEV unabhängig von den Details NavMeshAgent und Animator, damit er ohne eine vollständige Szene getestet werden kann.
Die AdaptergrenzeDer Adapter übersetzt Unity-Typen in eine anbieterneutrale Anfrage und übersetzt eine validierte Absicht zurück in einen vorhandenen Befehl. Es sollte nicht SetDestination
aufrufen, keine Animation abspielen oder vor der Validierung Schaden anrichten. Diese Effekte gehören zum Executor- und Gameplay-System.
- Testszenarien vor Tuning-Eingabeaufforderungen
- Geringe Gesundheit mit verfügbarer Deckung.
- Keine Munition, aber ein erreichbarer Rückzugsort Route.
- Ein Ziel zerstört, während die Anfrage im Flug ist.
- Zwei gleich gültige Deckungspunkte mit unterschiedlichen Entfernungen.
- JEV Zeitüberschreitung während eines aktiven Kampfzustands.
Szene entladen oder NPC verschwinden vor der Antwort.
Stellen Sie für jedes Szenario sicher, dass die ausgewählte Aktion zulässig ist, der Executor höchstens einmal aufgerufen wird, die veraltete Antwort ignoriert wird und fallback NPC in einem gültigen Zustand belässt.
Was im Unity Profiler gemessen werden soll
Verfolgen Sie die Statusprojektionszeit, die Serialisierungszeit, die Netzwerkwartezeit, die Validierungszeit, den Executor-Start, den Aktionsabschluss und die fallback Anzahl. Ein Modell kann schnell sein, während der Adapter langsam ist, weil er zu viele Zustände serialisiert oder die Arbeit im Hauptthread plant. Messen Sie die Frame-Auswirkungen getrennt von der End-to-End-Entscheidungslatenz.
- Ein gestaffelter Versandplan
- Prototyp mit einem lokalen Fake-Decision-Client.
- Aufzeichnungs- und Wiedergabestatus Schnappschüsse.
- Fügen Sie den Remote-Client hinter einem Feature-Flag hinzu.
- Schiff fallback-erstes Verhalten und Telemetrie.
Führen Sie eine begrenzte NPC Kohorte durch, bevor Sie die Entscheidungsebene universell machen.Für den anbieterneutralen Vertrag lesen Sie JEV API Nutzung. Informationen zum Aktionsraumdesign finden Sie unter JEV Legal Actions. Das allgemeine Tutorial finden Sie unter JEV Tutorial


