Zum Hauptinhalt springen

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.

„Objekt" und „Entity" sind dasselbe

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.

Warum das in der Praxis zählt

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 + Materialeine sichtbare Form
einen Modellverweisein importiertes 3D-Modell
eine Lichtkomponenteein Licht
eine Textkomponenteein Stück Text
einen Starrkörper + einen Collideretwas, das die Physik bewegen kann
einen Ankereine Szene
ein Skript oder einen Patchetwas 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 istHatHat nicht
Eine Szeneeinen Anker und Kindereinen Transform
Ein gewöhnliches Objekteinen Transform und was es sonst brauchteinen Anker
Verhalten auf Space-Ebeneein Skript oder einen Patch, und kein ElternobjektTransform, 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.

Eine Komponente je Typ pro Entity

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.

Ein Objekt zu löschen löscht alles darin

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?

AnkerIhre Szene erscheint, wenn…
imagedie Kamera ein gedrucktes Bild erkennt
qrein QR-Code gescannt wird
geoder Besucher an einem Ort ist
faceein Gesicht erkannt wird
surfaceder Besucher sie auf Boden, Wand, Decke oder Tisch stellt
panoramaeine 360°-Umgebung geöffnet wird
3dsofort — eine normale 3D-Szene, ganz ohne AR
VPS ist kein eigener Anker

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.