Play through the first camera that is switched on
The game view took whatever camera came first in the scene, ignoring the switch, so `enabled = false` on a camera did nothing and a second camera never got its turn. `World.activeCamera()` now decides: of the cameras switched on – the whole parent chain counted, as for any object – the first in hierarchy order, and none on renders nothing at all. It is asked per frame, so a graph switching cameras hands the view over immediately. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
75be133374
commit
37fff5dabf
8 files changed
+227
-13
No files matched your search
@@ -0,0 +1,46 @@
|
||||
1. kamera enabled auf false setzen bewirkt nichts, wird trotzdem gerendert
|
||||
2. wenn mehrere kammeras in der scene sind, dann soll die erste gefundene die enabled ist die aktive kamera sein
|
||||
|
||||
---
|
||||
|
||||
**Umgesetzt (2026-09-09).** Beide Punkte waren dieselbe Stelle: der Game-View nahm die Kamera
|
||||
mit `world.firstOfType('camera')` — die **erste ueberhaupt**, ohne den Schalter anzusehen. Ein
|
||||
ausgeschaltetes `enabled` konnte deshalb nichts bewirken (Punkt 1), und eine zweite Kamera kam
|
||||
nie zum Zug, egal wie die Schalter standen (Punkt 2).
|
||||
|
||||
An ihre Stelle tritt **`World.activeCamera()`** — die einzige Stelle, die entscheidet, durch
|
||||
welche Kamera gespielt wird:
|
||||
|
||||
- **geschaltet** zaehlt wie bei jedem Objekt die ganze Kette nach oben (`isHandleEnabled`): eine
|
||||
Kamera unter einem ausgeschalteten Container ist ebenfalls aus.
|
||||
- **"erste"** heisst in **Hierarchie-Reihenfolge**, also von oben nach unten im Hierarchie-Panel,
|
||||
nicht in Speicherreihenfolge. Die beiden koennen auseinanderlaufen, sobald eine Kamera unter
|
||||
einem Elternteil haengt, das spaeter gespeichert ist — dann gewinnt das, was der User sieht.
|
||||
- **keine an → gar nichts wird gerendert**, wie bei einer Szene ohne Kamera. Der Hinweis beim
|
||||
Start sagt jetzt in beiden Faellen dasselbe: *"No camera is switched on – nothing is rendered"*.
|
||||
|
||||
Ausgewertet wird pro Frame, also wirkt ein Umschalten waehrend des Spielens sofort — auch das
|
||||
per `Set enabled`-Node aus einem Graphen heraus. Das ist der Weg, wie eine Szene die Ansicht
|
||||
von einer Kamera an die naechste uebergibt.
|
||||
|
||||
`firstOfType` ist damit unbenutzt und geloescht.
|
||||
|
||||
**Belegt** — vier Unit-Tests (`tests/core/camera.test.ts`, jeder faellt ohne den Fix um) und
|
||||
sieben E2E-Checks in Modul 03. Der Test-Hook `__gm.gameInfo()` nennt dafuer neu die **objectId
|
||||
der aktiven Kamera**, sonst waere "durch welche Kamera" nur zu erraten:
|
||||
|
||||
```
|
||||
PASS a switched-off camera renders nothing although it is still in the scene
|
||||
– {"rendering":false,"visibleItems":0,"camera":""}
|
||||
PASS the switched-on camera takes over, and the game is seen through it
|
||||
– {"rendering":true,"visibleItems":0,"camera":"m8ngyi2lkc"}
|
||||
PASS with both switched on the first camera in hierarchy order is the active one again
|
||||
– {"rendering":true,"visibleItems":2,"camera":"o3"}
|
||||
```
|
||||
|
||||
Der mittlere Check ist der eigentliche Beweis fuer Punkt 2: die zweite Kamera steht bei
|
||||
x = 5000, die beiden Kisten liegen am Ursprung. `visibleItems: 0` bei `rendering: true` heisst,
|
||||
dass wirklich durch **ihren** Ausschnitt gesehen wird — der blosse Name der Kamera haette auch
|
||||
dann gestimmt, wenn das Bild von der alten Kamera gekommen waere.
|
||||
|
||||
Screenshot `10b-second-camera`.
|
||||
@@ -1,2 +0,0 @@
|
||||
1. kamera enabled auf false setzen bewirkt nichts, wird trotzdem gerendert
|
||||
2. wenn mehrere kammeras in der scene sind, dann soll die erste gefundene die enabled ist die aktive kamera sein
|
||||
Reference in new issue
Block a user