Run in editor: Änderungen am Graph erreichen ein laufendes Behavior erst nach einem Neustart #216

Closed
opened 2026-09-23 07:05:35 +02:00 by meleki · 2 comments
Owner

Aus #158 (Fund beim Messen: „Eine laufende Behavior-Instanz behält den Graph, mit dem sie gestartet ist … Bestehendes Verhalten, kein Teil dieser Änderung.“). Steht heute als Hinweis im Wiki unter Colliders.

Befund

  • Ein Behavior mit Run in editor (#12) läuft, während man im Editor arbeitet. Der Interpreter hält den Graph, mit dem die Instanz begonnen hat.
  • Ändert man währenddessen den Graph (Node-Einstellung, neue Kante, anderer Wert), läuft die Instanz mit dem alten weiter, bis man Run in editor aus- und wieder einschaltet oder Play drückt.
  • Gerade das Hin und Her zwischen „ändern“ und „zusehen“ ist der Grund für Run in editor. Heute sieht es so aus, als hätte die Änderung nicht gewirkt. In #158 hat das einen Test blind gemacht, der Test schaltet seitdem aus und wieder an.

Zu bauen (Vorschlag)

  • Ändert sich der Graph eines Behavior-Assets (oder eines per Call eingebundenen Graphen), werden die laufenden Editor-Instanzen dieses Assets neu gestartet: On start feuert erneut, lokale Variablen beginnen bei ihren Defaults. Globale Variablen und State Machines bleiben.
  • Neu gestartet wird nach dem Loslassen einer Geste (Kommando ausgeführt), nicht bei jeder Vorschau während des Ziehens.
  • Play bleibt unberührt, dort läuft ohnehin eine Wegwerf-Kopie.
  • Tests: Unit im EditorRun, dass nach einer Graph-Änderung die neue Einstellung wirkt. e2e: Raycast-Ebene im laufenden Editor-Run umstellen (der Fall aus #158), ohne Aus-/Einschalten.

Offen (mit Vorschlag)

  1. Neustart oder Weiterlaufen mit dem neuen Graph (Zustand behalten)? Vorschlag: Neustart. Weiterlaufen scheitert, sobald Nodes mit eigenem Zustand (Timer, Sequence) wegfallen oder dazukommen.
  2. Was im Editor-Run schon ins Modell geschrieben wurde (#12: Positionen usw.), bleibt. Vorschlag: ja, das ist die bestehende Unity-Semantik.
Aus #158 (Fund beim Messen: „Eine laufende Behavior-Instanz behält den Graph, mit dem sie gestartet ist … Bestehendes Verhalten, kein Teil dieser Änderung.“). Steht heute als Hinweis im Wiki unter *Colliders*. ## Befund - Ein Behavior mit **Run in editor** (#12) läuft, während man im Editor arbeitet. Der Interpreter hält den Graph, mit dem die Instanz begonnen hat. - Ändert man währenddessen den Graph (Node-Einstellung, neue Kante, anderer Wert), läuft die Instanz mit dem alten weiter, bis man *Run in editor* aus- und wieder einschaltet oder Play drückt. - Gerade das Hin und Her zwischen „ändern“ und „zusehen“ ist der Grund für *Run in editor*. Heute sieht es so aus, als hätte die Änderung nicht gewirkt. In #158 hat das einen Test blind gemacht, der Test schaltet seitdem aus und wieder an. ## Zu bauen (Vorschlag) - Ändert sich der Graph eines Behavior-Assets (oder eines per Call eingebundenen Graphen), werden die laufenden Editor-Instanzen dieses Assets **neu gestartet**: `On start` feuert erneut, lokale Variablen beginnen bei ihren Defaults. Globale Variablen und State Machines bleiben. - Neu gestartet wird nach dem Loslassen einer Geste (Kommando ausgeführt), nicht bei jeder Vorschau während des Ziehens. - Play bleibt unberührt, dort läuft ohnehin eine Wegwerf-Kopie. - Tests: Unit im `EditorRun`, dass nach einer Graph-Änderung die neue Einstellung wirkt. e2e: Raycast-Ebene im laufenden Editor-Run umstellen (der Fall aus #158), ohne Aus-/Einschalten. ## Offen (mit Vorschlag) 1. **Neustart oder Weiterlaufen mit dem neuen Graph** (Zustand behalten)? Vorschlag: Neustart. Weiterlaufen scheitert, sobald Nodes mit eigenem Zustand (Timer, Sequence) wegfallen oder dazukommen. 2. **Was im Editor-Run schon ins Modell geschrieben wurde** (#12: Positionen usw.), bleibt. Vorschlag: ja, das ist die bestehende Unity-Semantik.
meleki added the new label 2026-09-23 07:05:35 +02:00
admin added low-priority and removed new labels 2026-09-23 07:10:37 +02:00

vorschläge passen

vorschläge passen
admin added this to the Development project 2026-09-23 07:14:43 +02:00
admin moved this to Next in Development on 2026-10-02 10:36:33 +02:00
Author
Owner

Geschlossen ohne Umbau: Der Befund stimmt nicht mehr.

Was ich gemessen habe

  • Eine Graph-Änderung kommt beim laufenden Run-in-editor-Behavior schon im nächsten Frame an, ohne Aus- und Einschalten. Das gilt für eine Node-Einstellung, eine neue oder entfernte Kante, einen neuen oder entfernten Node und für Undo.
  • Gemessen mit einem Unit-Test und im Browser mit Modul 43 (der Raycast-Fall aus #158), beides bevor ich etwas gebaut habe.
  • Seit wann das so ist, habe ich nicht ermittelt.

Entscheidung

Der Neustart aus dem Vorschlag („vorschläge passen“) wird nicht gebaut. Das habe ich am 2026-10-02 mit den Messwerten rückgefragt, die Antwort war „so lassen“.

  • Das Behavior läuft weiter. Variablen und Timer behalten ihren Stand, On start feuert nicht neu.
  • Grund: Ein Neustart ließe bei jeder Graph-Änderung On destroy und On start erneut laufen. Was On start schreibt oder spawnt, landet im Editor-Run jedes Mal im gespeicherten Projekt.
  • Neu starten geht wie bisher: Run in editor aus und wieder an, oder Play.

Was sich ändert

  • Am Code nichts.
  • Modul 43 schaltet das Behavior vor der Messung nicht mehr aus und an.
  • Wiki: Der Hinweis in Colliders („erst nach einem Neustart“) ist ersetzt. Concepts hat den neuen Absatz „Editing the graph while it runs“.

Under the hood

Ein Command löst das Projekt-Event aus, EditorRun frischt auf, und syncFromModel im BehaviorSystem leert den Graph-Cache. Einstellungen eines Nodes werden ohnehin an Ort und Stelle geändert.

Tests (auf melektaus-atx)

Gate          → 212 Files, 3264 Tests, CHECK EXIT 0   (3260 + 4)
e2e 18,20,43  → ALL PASSED – 57 checks
  • Vier neue Unit-Tests in tests/editor/editor-run.test.ts: geänderte Einstellung, Node dazu und Node weg, ein Fluss an On start, der erst nach Aus und An feuert, und Undo.
  • Eine Gegenprobe: Ohne das Leeren des Caches fällt der Kanten-Test. Der Einstellungs-Test fällt dabei nicht, weil Einstellungen an Ort und Stelle geändert werden.
  • Kein neuer e2e-Check, die Summe bleibt 1676. Der bestehende Check in Modul 43 hält jetzt ohne den Workaround.
  • e2e lief auf dem Baum dieses und des nächsten Commits zusammen. Volle Suite und Smokes liefen nicht, das macht der CI-Lauf.

Nebenbei, eigener Commit

Auf Wunsch gibt es zwei neue Nodes neben Key is down, ohne eigenes Issue:

  • Key was pressed ist genau in dem Frame true, in dem die Taste hinuntergeht (derselbe Frame wie On key down).
  • Key was released ist genau in dem Frame true, in dem sie losgelassen wird (wie On key up).
  • Selbst festgelegt: keine Wiederholung bei gehaltener Taste, und verliert das Fenster den Fokus, gelten alle gehaltenen Tasten in dem Frame als losgelassen.
  • Gate für beide Commits zusammen: 213 Files, 3278 Tests (3264 + 14). Acht Gegenproben greifen. Im Browser habe ich die Nodes nicht angesehen, weder in der Palette noch mit echter Tastatur.

Commits: b45bbcc (#216) und b5339b9 (Nodes). Wiki: Colliders, Concepts (beide #216) und Behaviors (die zwei Nodes).

Geschlossen ohne Umbau: Der Befund stimmt nicht mehr. ## Was ich gemessen habe - **Eine Graph-Änderung kommt beim laufenden Run-in-editor-Behavior schon im nächsten Frame an**, ohne Aus- und Einschalten. Das gilt für eine Node-Einstellung, eine neue oder entfernte Kante, einen neuen oder entfernten Node und für Undo. - Gemessen mit einem Unit-Test und im Browser mit Modul 43 (der Raycast-Fall aus #158), beides bevor ich etwas gebaut habe. - Seit wann das so ist, habe ich nicht ermittelt. ## Entscheidung Der Neustart aus dem Vorschlag („vorschläge passen“) wird **nicht** gebaut. Das habe ich am 2026-10-02 mit den Messwerten rückgefragt, die Antwort war „so lassen“. - **Das Behavior läuft weiter.** Variablen und Timer behalten ihren Stand, `On start` feuert nicht neu. - **Grund:** Ein Neustart ließe bei jeder Graph-Änderung `On destroy` und `On start` erneut laufen. Was `On start` schreibt oder spawnt, landet im Editor-Run jedes Mal im gespeicherten Projekt. - **Neu starten** geht wie bisher: *Run in editor* aus und wieder an, oder Play. ## Was sich ändert - Am Code nichts. - **Modul 43** schaltet das Behavior vor der Messung nicht mehr aus und an. - **Wiki:** Der Hinweis in *Colliders* („erst nach einem Neustart“) ist ersetzt. *Concepts* hat den neuen Absatz „Editing the graph while it runs“. ## Under the hood Ein Command löst das Projekt-Event aus, `EditorRun` frischt auf, und `syncFromModel` im `BehaviorSystem` leert den Graph-Cache. Einstellungen eines Nodes werden ohnehin an Ort und Stelle geändert. ## Tests (auf `melektaus-atx`) ``` Gate → 212 Files, 3264 Tests, CHECK EXIT 0 (3260 + 4) e2e 18,20,43 → ALL PASSED – 57 checks ``` - **Vier neue Unit-Tests** in `tests/editor/editor-run.test.ts`: geänderte Einstellung, Node dazu und Node weg, ein Fluss an `On start`, der erst nach Aus und An feuert, und Undo. - **Eine Gegenprobe:** Ohne das Leeren des Caches fällt der Kanten-Test. Der Einstellungs-Test fällt dabei nicht, weil Einstellungen an Ort und Stelle geändert werden. - **Kein neuer e2e-Check**, die Summe bleibt 1676. Der bestehende Check in Modul 43 hält jetzt ohne den Workaround. - e2e lief auf dem Baum dieses und des nächsten Commits zusammen. Volle Suite und Smokes liefen nicht, das macht der CI-Lauf. ## Nebenbei, eigener Commit Auf Wunsch gibt es zwei neue Nodes neben `Key is down`, ohne eigenes Issue: - **`Key was pressed`** ist genau in dem Frame `true`, in dem die Taste hinuntergeht (derselbe Frame wie `On key down`). - **`Key was released`** ist genau in dem Frame `true`, in dem sie losgelassen wird (wie `On key up`). - **Selbst festgelegt:** keine Wiederholung bei gehaltener Taste, und verliert das Fenster den Fokus, gelten alle gehaltenen Tasten in dem Frame als losgelassen. - Gate für beide Commits zusammen: 213 Files, 3278 Tests (3264 + 14). Acht Gegenproben greifen. Im Browser habe ich die Nodes nicht angesehen, weder in der Palette noch mit echter Tastatur. Commits: `b45bbcc` (#216) und `b5339b9` (Nodes). Wiki: *Colliders*, *Concepts* (beide #216) und *Behaviors* (die zwei Nodes).
admin moved this to Done in Development on 2026-10-02 18:03:09 +02:00
Sign in to join this conversation.
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: meleki/feuerwerk#216