Objekte und Szenen
Alles in Ihrem Projekt entsteht aus zwei Ideen: Dinge, die aus Komponenten bestehen, und Szenen, die entscheiden, wann diese Dinge erscheinen. Diese Seite behandelt beides.
Der Editor nennt sie Objekte, weil sie auf dem Bildschirm so aussehen. Die Engine und die Skript-API nennen sie Entities. Es gibt keinen Unterschied — diese Seite sagt Entity, wo die Abgrenzung zu Komponenten wichtig ist, und Objekt überall sonst.
Zwei Beziehungen, und sie sind nicht dieselbe
Fast jedes Missverständnis dieser Engine entsteht daraus, zwei Dinge zu verwechseln, die beide wie „drin" aussehen.
Eine Entity BESTEHT AUS Komponenten. Komponenten sind keine Kinder — sie sind die Teile, die entscheiden, was die Entity ist. Von jeder Sorte höchstens eine.
Entity "Lampe"
├── Meta ihr Name, ob sie an ist, ob sie sichtbar ist
├── Transform wo sie ist, wie sie gedreht ist, wie groß
├── Model welches 3D-Modell gezeichnet wird
└── Events worauf sie reagiert
Eine Entity kann andere Entities ENTHALTEN. Das sind Kinder, und sie sind eigenständige Entities — jede mit eigenen Komponenten.
Entity "Lampe"
└── Entity "Glühbirne" ← eine eigene Entity…
├── Transform ← …mit eigenen Komponenten
└── Light
Zusammengesetzt sieht eine echte Szene so aus — Komponenten links von jeder Entity, Kinder eingerückt darunter:
Entity "Wohnzimmer" ◆ Anchor ← diese ist eine SZENE: sie hat einen Anker
│
├── Entity "Lampe" ◆ Transform ◆ Model ◆ Events
│ └── Entity "Glühbirne" ◆ Transform ◆ Light
│
└── Entity "Tisch" ◆ Transform ◆ Model ◆ RigidBody ◆ Collider
Alles auf diesem Bild ist dieselbe Art Sache: eine Entity. Was die eine zur Szene, die andere zur Lampe und die dritte zum Physikkörper macht, ist allein, welche Komponenten sie tragen.
Die Lampe zu bewegen bewegt die Glühbirne, weil die Glühbirne darin ist. Der Lampe die Modellkomponente wegzunehmen entfernt die Glühbirne nicht — das ist Komposition, nicht Enthaltensein.
Wenn Sie sich fragen „sollte das eine Komponente oder ein Kindobjekt sein?", lautet die Antwort: eine Komponente, wenn es ein Aspekt dieses Dings ist; ein Kind, wenn es ein eigenes Ding ist, das sich mit ihm bewegen soll.
Eine Entity ist das, was ihre Komponenten sagen
Es gibt kein Menü von Objekttypen zum Auswählen. Sie bauen, was Sie brauchen, indem Sie Komponenten kombinieren:
| Geben Sie einer Entity… | …und Sie bekommen |
|---|---|
| Geometrie + Material | eine sichtbare Form |
| einen Modellverweis | ein importiertes 3D-Modell |
| eine Lichtkomponente | ein Licht |
| eine Textkomponente | ein Stück Text |
| einen Starrkörper + einen Collider | etwas, das die Physik bewegen kann |
| einen Anker | eine Szene |
| ein Skript oder einen Patch | etwas mit Verhalten |
Sagen wir, Sie wollen einen hüpfenden Ball. Beginnen Sie mit einer Kugelgeometrie und einem Material — jetzt sehen Sie ihn. Fügen Sie einen Starrkörper und einen Collider hinzu, nun fällt und hüpft er. Fügen Sie ein Skript hinzu, nun tut er etwas beim Aufkommen. Jede Komponente fügt eine Fähigkeit hinzu, und sie zu entfernen nimmt sie wieder weg.
Die drei Gestalten, denen Sie begegnen
Dasselbe Entity-Modell bringt drei Dinge hervor, die sich verschieden anfühlen, es aber nicht sind:
| Was es ist | Hat | Hat nicht |
|---|---|---|
| Eine Szene | einen Anker und Kinder | einen Transform |
| Ein gewöhnliches Objekt | einen Transform und was es sonst braucht | einen Anker |
| Verhalten auf Space-Ebene | ein Skript oder einen Patch, und kein Elternobjekt | Transform, Anker |
Eine Szene hat keinen Transform, weil sie nirgends zu sein braucht: Ihre Position kommt von dem realen Ding, an dem sie verankert ist. Ein Träger auf Space-Ebene hat keinen, weil er überhaupt nicht in der Welt ist — er ist nur Logik, die weiterläuft.
Drei Materialien auf einem Modell? Nutzen Sie die Slots in seiner einen Materialkomponente. Zwei von irgendetwas anderem? Nutzen Sie Kind-Entities — eine Lampe mit zwei Birnen ist eine Lampen-Entity mit zwei Kindern.
Jede Entity hat außerdem einen Namen (darüber finden Sie sie) und ein Elternobjekt.
Aktiviert und sichtbar sind verschieden
Die beiden sehen im Inspektor gleich aus und verhalten sich überhaupt nicht gleich.
Deaktiviert nimmt die Entity aus dem laufenden Erlebnis heraus. Nicht gezeichnet, nicht antippbar, Skripte gestoppt, Ereignisse stumm. Als wäre sie nicht da.
Unsichtbar verhindert nur das Zeichnen und Antippen. Sie ist weiterhin da: Skripte laufen, die Physik kollidiert weiter.
Also: eine unsichtbare Wand, die den Spieler trotzdem aufhält? Unsichtbar. Ein Preis, der später erscheint? Deaktiviert, bis Sie ihn brauchen.
Eltern und Kinder
Entities bilden einen Baum. Bewegen Sie ein Elternobjekt, kommen seine Kinder mit und behalten ihre Position relativ dazu — so baut man alles, was aus Teilen besteht. Eine Karosserie mit vier daran gehängten Rädern fährt als ein Auto.
Eine Entity ohne Elternobjekt sitzt an der Wurzel ihrer Szene.
Die Kinder gehen mit, und deren Kinder. Ziehen Sie eines zuerst heraus, wenn Sie es behalten wollen.
Sie können eine Entity nicht zum Kind ihres eigenen Nachfahren machen — der Editor weigert sich, statt den Baum zu verknoten.
Szenen und Anker
Eine Szene ist eine Entity mit einem Anker, und der Anker beantwortet eine Frage: Wann soll das erscheinen?
| Anker | Ihre Szene erscheint, wenn… |
|---|---|
image | die Kamera ein gedrucktes Bild erkennt |
qr | ein QR-Code gescannt wird |
geo | der Besucher an einem Ort ist |
face | ein Gesicht erkannt wird |
surface | der Besucher sie auf Boden, Wand, Decke oder Tisch stellt |
panorama | eine 360°-Umgebung geöffnet wird |
3d | sofort — eine normale 3D-Szene, ganz ohne AR |
Sich gegen eine gescannte Karte eines realen Ortes zu positionieren ist eine Option des Surface-Ankers, kein eigener Typ. Richten Sie eine Surface-Szene ein und schalten Sie dann VPS an.
Mehrere Szenen, ein Marker
Szenen, die denselben Auslöser teilen (dasselbe Bild, denselben QR-Code, denselben Ort), bilden eine Gruppe, und es wird immer nur eine Szene der Gruppe gezeigt.
So funktioniert eine Geschichte: Dasselbe Plakat öffnet das erste Kapitel und später das zweite, weil Sie umgeschaltet haben, welche Szene der Gruppe aktiv ist.
Das Ein- und Ausblenden bei Erkennung ist nur ein Paar Ereignisse, das der Editor für Sie anlegt
(on-detect zeigt, on-lost verbirgt). Das sind gewöhnliche Ereignisse, Sie können sie also
ändern — etwa um Inhalt auf dem Bildschirm zu lassen, nachdem der Marker das Bild verlässt, was
Besuchern meist lieber ist als Inhalt, der beim kleinsten Wackeln verschwindet.
Surface-Szenen haben drei getrennte Einstellungen
Sie werden oft verwechselt, deshalb hier nebeneinander:
- Welche Flächen akzeptiert werden — Boden, Wand, Decke, Tisch.
- Wie Inhalt platziert wird — automatisch auf einer erkannten Fläche oder dort, wo getippt wird.
- Welche Tracking-Engine — nur im Web relevant; native Apps nutzen immer die der Plattform.
Verhalten, das eine Szene überdauert
Geben Sie einer Entity Verhalten und kein Elternobjekt, und sie gehört nicht mehr zu einer einzelnen Szene — sie gehört zum ganzen Space. Sie läuft weiter, während Szenen kommen und gehen, und sie hört jedes Ereignis, das irgendwo passiert.
Dort gehören ein Punktezähler, ein globaler Controller oder „merken, was der Besucher gewählt hat" hin. Ein Skript in einer Szene hört in dem Moment auf, in dem diese Szene aufhört.
Wie der Editor Objekte beschriftet
Sie sehen Beschriftungen wie model, primitive, text. Der Editor ermittelt sie daran, was das Objekt trägt, in dieser Reihenfolge:
Splat-Verweis → splat
model + Skinning → animated model
model → static model
video → video ← vor der Geometrie geprüft
text → text
audio → audio
light → light
geometry → primitive
alles andere → object
Das erklärt eine kleine Überraschung: Eine Fläche, die ein Video abspielt, heißt video, nicht primitive. Es erklärt auch, warum Material und Geometrie nur bei Primitiven und statischen Modellen bearbeitbar sind.
Weiter: Komponenten — was jede wirklich steuert.