Übung: Erstellen intelligenter Objektplatzierungen mithilfe von Solvern

Abgeschlossen

Solver sind Komponenten des Mixed Reality Toolkit (MRTK). In den folgenden Abschnitten werden zwei Solvertypen und ihre Funktionen beschrieben.

Position der Solver im MRTK

Die MRTK-Solver befinden sich im SDK-Ordner des Mixed Reality Toolkit. Wechseln Sie zum Anzeigen der in Ihrem Projekt verfügbaren Solver zu Packages>MRTK Spatial Manipulation>Solvers.

Screenshot that shows the location of the solvers folder.

Solver „Richtungsindikator“

Mit dem Solver „Richtungsindikator“ können Sie den Blick des Benutzers auf Objekte lenken. Gehen Sie dazu wie folgt vor:

  1. Wechseln Sie im Fenster Projekt zum Ordner Ressourcen>MRTK.Tutorials.GettingStarted>Prefabs. Ziehen Sie das Prefab Chevron in das Fenster Hierarchy. Legen Sie unter „Transform“ die Position auf X = 0, Y = 1,5, Z = 2 fest, um das Prefab in der Nähe des Objekts RoverExplorer zu platzieren.

    Screenshot that shows the newly added Chevron prefab selected.

  2. Benennen Sie das neu hinzugefügte Objekt „Chevron“ in Indicator um. Klicken Sie dann im Fenster Inspektor auf die Schaltfläche Komponente hinzufügen, um die Komponente DirectionalIndicator hinzuzufügen.

    Screenshot that shows the DirectionalIndicator solver component added.

  3. Konfigurieren Sie die Komponenten DirectionalIndicator und SolverHandler wie folgt:

    a. Überprüfen Sie, ob die Option Typ des nachverfolgten Ziels (Tracked Target Type) der Komponente SolverHandler auf Kopf festgelegt ist.

    b. Weisen Sie das Objekt RoverExplorer dem Eintrag Richtungsziel (Directional Target) der Komponente DirectionalIndicator zu. Ziehen Sie hierzu das Objekt aus dem Fenster Hierarchie in das Feld Kein (Transform).

    c. Ändern Sie den Wert für Ansichtsoffset in 0,2.

    Screenshot that shows the DirectionalIndicator solver component configured.

  4. Klicken Sie auf Wiedergabe, um in den Spielmodus zu wechseln. Halten Sie die rechte Maustaste gedrückt, während Sie die Maus nach links oder rechts bewegen, um die Blickrichtung zu verändern.

    Wie Sie sehen, wird beim Wegsehen vom Objekt RoverExplorer das Objekt Indicator angezeigt, das den Blick in Richtung des RoverExplorer-Objekts lenkt.

    Screenshot that shows the Play mode split view with DirectionalIndicator solver in use.

Solver „Zum Platzieren tippen“

Mit dem Solver „Zum Platzieren tippen“ können Sie Objekte neu positionieren. Gehen Sie dazu wie folgt vor:

  1. Wählen Sie im Fenster Hierarchie das Objekt RoverExplorer>RoverAssembly aus. Klicken Sie dann im Fenster Inspector auf die Schaltfläche Add Component, um die Komponente Tap To Place hinzuzufügen. Konfigurieren Sie die Komponente wie folgt:

    a. Überprüfen Sie, ob die Option Typ des nachverfolgten Ziels (Tracked Target Type) der Komponente SolverHandler auf Kopf festgelegt ist.

    b. Deaktivieren Sie Use Default Surface Normal Offset, und stellen Sie sicher, dass Surface Normal Offset auf 0 festgelegt ist.

    c. Aktivieren Sie das Kontrollkästchen Vertikale Ausrichtung beibehalten.

    Screenshot that shows the Tap To Place solver component added and configured.

  2. Verwenden Sie dann Add Component, um die Komponente Stateful Interactable hinzuzufügen. Suchen Sie im Fenster Inspector nach dem On Clicked ()-Ereignis. Klicken Sie auf das Symbol +, um ein neues Ereignis hinzuzufügen. Konfigurieren Sie das Ereignis wie folgt:

    a. Weisen Sie das RoverAssembly-Objekt als Listener für das On Clicked ()-Ereignis zu, indem Sie es aus Hierarchy in das Feld None (Object) ziehen.

    b. Wählen Sie in der Dropdownliste No FunctionTapToPlace>StartPlacement() aus, um diese Methode beim Auslösen des Ereignisses aufzurufen.

    Screenshot that shows the Tap To Place On Placing Started event configured.

  3. Lassen Sie das Objekt RoverAssembly im Fenster Hierarchie ausgewählt, und suchen Sie im Fenster Inspektor nach dem Ereignis On Placing Started (). Klicken Sie auf das Symbol +, um ein neues Ereignis hinzuzufügen.

    Screenshot that shows the Tap To Place On Placing Started event added.

  4. Konfigurieren Sie das Ereignis wie folgt:

    a. Weisen Sie dem Ereignis On Placing Started () das Objekt RoverAssembly als Listener zu, indem Sie es aus dem Fenster Hierarchie in das Feld Kein (Objekt) ziehen.

    b. Klicken Sie in der Dropdownliste Keine Funktion auf TapToPlace>float SurfaceNormalOffset, um den Eigenschaftswert SurfaceNormalOffset beim Auslösen des Ereignisses zu aktualisieren.

    c. Überprüfen Sie, ob das Argument auf 0 festgelegt ist.

    Screenshot that shows the Tap To Place On Placing Started event configured.

  5. Klicken Sie im Fenster Hierarchie mit der rechten Maustaste auf eine leere Stelle. Klicken Sie auf 3D-Objekt>Cube, um ein temporäres Objekt zu erstellen, das den Untergrund darstellen soll. Konfigurieren Sie die Komponente Transform wie folgt:

    • Position: X = 0; Y = 0,15; Z = 6
    • Drehung: X = 0, Y = 0, Z = 0
    • Skalierung: X = 10, Y = 0,2, Z = 10

    Screenshot that shows the temporary ground Cube object added and positioned.

  6. Klicken Sie auf Wiedergabe, um in den Spielmodus zu wechseln. Halten Sie die rechte Maustaste gedrückt, während Sie die Maus so weit nach unten bewegen, bis das RoverAssembly-Objekt in Ihr Blickfeld gerät.

    Screenshot that shows the Play mode split view, with gaze hitting the RoverAssembly object.

  7. Halten Sie die Leertaste gedrückt, klicken Sie auf die linke Maustaste, um ein Tippen in die Luft durchzuführen, und starten Sie den Vorgang zum Platzieren durch Tippen.

    Screenshot that shows the Play mode split view, with placing started.

  8. Halten Sie die rechte Maustaste gedrückt, während Sie die Maus nach links oder rechts bewegen, um die Blickrichtung zu verändern. Wenn Sie mit der Platzierung zufrieden sind, halten Sie die Leertaste gedrückt, und klicken Sie auf die linke Maustaste, um ein abschließendes Tippen in die Luft durchzuführen.

    Screenshot that shows the Play mode split view, with placing ended.

  9. Wenn Sie das Feature im Spielmodus getestet haben, klicken Sie mit der rechten Maustaste auf das Cube-Objekt. Klicken Sie auf Löschen, um das Objekt aus der Szene zu entfernen.

    Screenshot that shows how to delete the temporary ground Cube.