Begrenzungsrahmen — MRTK2

Begrenzungsrahmen

Hinweis

Das Begrenzungsfeld ist veraltet und wird durch das nachfolgende Begrenzungssteuerelement ersetzt. Verwenden Sie eine der Migrationsoptionen , um vorhandene Spielobjekte zu aktualisieren.

Das BoundingBox.cs Skript bietet grundlegende Funktionen zum Transformieren von Objekten in Mixed Reality. Ein begrenzungsfeld zeigt einen Cube um das Hologramm herum an, um anzugeben, dass es interagiert werden kann. Handles an den Ecken und Kanten des Cubes ermöglichen das Skalieren oder Rotieren des Objekts. Das Begrenzungsfeld reagiert auch auf Benutzereingaben. Auf HoloLens 2 reagiert das Begrenzungsfeld beispielsweise auf Fingernähe und gibt visuelles Feedback, um die Entfernung vom Objekt wahrzunehmen. Alle Interaktionen und Visuals können einfach angepasst werden.

Weitere Informationen finden Sie unter Begrenzungsfeld und App-Leiste im Windows Dev Center.

Beispielszene

In der BoundingBoxExamples Szene finden Sie Beispiele für Umgrenzungsrahmenkonfigurationen.

Beispiele für begrenzungsgebundene Felder

Hinzufügen und Konfigurieren eines Begrenzungsrahmens mithilfe von Unity Inspector

  1. Hinzufügen von Box Collider zu einem Objekt
  2. Zuweisen BoundingBox eines Skripts zu einem Objekt
  3. Konfigurieren von Optionen, z. B. Aktivierungsmethoden (siehe Abschnitt Inspektoreigenschaften unten)
  4. (Optional) Zuweisen von Prefabs und Materialien für ein HoloLens 2 Stilbindungsfeld (siehe Abschnitt Handle Styles unten)

Hinweis

Verwenden Sie das Feld Zielobjekt und Begrenzungen außer Kraft setzen im Inspektor, um ein bestimmtes Objekt und einen Collider im Objekt mit mehreren untergeordneten Komponenten zuzuweisen.

Begrenzungsfeld 1

Hinzufügen und Konfigurieren eines Begrenzungsrahmens im Code

  1. Instanziieren des Cubes GameObject

    GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
    
  2. Zuweisen BoundingBox eines Skripts zu einem Objekt mit Collider mithilfe von AddComponent<>()

    private BoundingBox bbox;
    bbox = cube.AddComponent<BoundingBox>();
    
  3. Konfigurieren von Optionen (siehe Abschnitt Inspektoreigenschaften unten)

    // Make the scale handles large
    bbox.ScaleHandleSize = 0.1f;
    // Hide rotation handles
    bbox.ShowRotationHandleForX = false;
    bbox.ShowRotationHandleForY = false;
    bbox.ShowRotationHandleForZ = false;
    
  4. (Optional) Weisen Sie Prefabs und Materialien für ein HoloLens 2 Stilbindungsfeld zu. Dies erfordert weiterhin Zuweisungen über den Inspektor, da die Materialien und Prefabs dynamisch geladen werden sollten.

Hinweis

Die Verwendung des Ordners "Resources" von Unity oder Shader.Find zum dynamischen Laden von Shadern wird nicht empfohlen, da Shaderpermutationen zur Laufzeit möglicherweise fehlen.

bbox.BoxMaterial = [Assign BoundingBox.mat]
bbox.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
bbox.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
bbox.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
bbox.ScaleHandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
bbox.ScaleHandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
bbox.ScaleHandleSize = 0.016f;
bbox.ScaleHandleColliderPadding = 0.016f;
bbox.RotationHandleSlatePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
bbox.RotationHandleSize = 0.016f;
bbox.RotateHandleColliderPadding = 0.016f;

Beispiel: Festlegen der minimalen, maximalen Begrenzungsrahmenskalierung mithilfe von MinMaxScaleConstraint

Um die minimale und maximale Skalierung festzulegen, verwenden Sie die MinMaxScaleConstraint. Sie können auch MinMaxScaleConstraint verwenden, um die minimale und maximale Skalierung für ManipulationHandlerfestzulegen.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bbox = cube.AddComponent<BoundingBox>();
// Important: BoundingBox creates a scale handler on start if one does not exist
// do not use AddComponent, as that will create a  duplicate handler that will not be used
MinMaxScaleConstraint scaleConstraint = bbox.gameObject.GetComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Beispiel: Hinzufügen eines Begrenzungsrahmens um ein Spielobjekt

Um ein Umrandungsfeld um ein Objekt hinzuzufügen, fügen Sie einfach eine BoundingBox Komponente hinzu:

private void PutABoxAroundIt(GameObject target)
{
   target.AddComponent<BoundingBox>();
}

Eigenschaften des Inspektors

Zielobjekt

Diese Eigenschaft gibt an, welches Objekt durch die Bearbeitung des Begrenzungsrahmens transformiert wird. Wenn kein Objekt festgelegt ist, ist das begrenzungsfeld standardmäßig auf das Besitzerobjekt festgelegt.

Grenzen überschreiben

Legt einen Box-Collider aus dem -Objekt für die Begrenzungsberechnung fest.

Aktivierungsverhalten

Es gibt mehrere Optionen zum Aktivieren der Begrenzungsrahmenschnittstelle.

  • Bei Start aktivieren: Das Begrenzungsfeld wird sichtbar, sobald die Szene gestartet wurde.
  • Durch Näherung aktivieren: Das Begrenzungsfeld wird sichtbar, wenn sich eine Hand in der Nähe des Objekts befindet.
  • Durch Zeiger aktivieren: Das Begrenzungsfeld wird sichtbar, wenn es von einem Handstrahlzeiger anvisiert wird.
  • Manuell aktivieren: Das Begrenzungsfeld wird nicht automatisch sichtbar. Sie können es manuell über ein Skript aktivieren, indem Sie auf die eigenschaft boundingBox.Active zugreifen.

Skalierungsminimierung

Die zulässige Mindestskala. Diese Eigenschaft ist veraltet, und es empfiehlt sich, ein MinMaxScaleConstraint Skript hinzuzufügen. Wenn dieses Skript hinzugefügt wird, wird die Mindestskala von dem Skript anstelle des begrenzungsbasierten Felds übernommen.

Maximale Skalierung

Die maximal zulässige Skalierung. Diese Eigenschaft ist veraltet, und es empfiehlt sich, ein MinMaxScaleConstraint Skript hinzuzufügen. Wenn dieses Skript hinzugefügt wird, wird die maximale Skalierung aus dem umgebenden Feld übernommen.

Boxanzeige

Verschiedene Visualisierungsoptionen für begrenzungsgebundene Felder.

Wenn Flatten Axis auf Flatten Auto festgelegt ist, lässt das Skript die Bearbeitung entlang der Achse mit der kleinsten Ausdehnung nicht zu. Dies führt zu einem 2D-Begrenzungsrahmen, der normalerweise für dünne Objekte verwendet wird.

Ziehpunkte

Sie können das Material und das Prefab zuweisen, um die Handle-Formatvorlage zu überschreiben. Wenn keine Handles zugewiesen sind, werden diese im Standardformat angezeigt.

Events

Das Begrenzungsfeld stellt die folgenden Ereignisse bereit. In diesem Beispiel werden diese Ereignisse zum Wiedergeben von Audiofeedback verwendet.

  • Rotieren gestartet: Wird ausgelöst, wenn die Drehung beginnt.
  • Rotieren beendet: Wird ausgelöst, wenn die Drehung endet.
  • Skalierung gestartet: Wird ausgelöst, wenn die Skalierung beginnt.
  • Skalierung beendet: Wird ausgelöst, wenn die Skalierung endet.
Events

Behandeln von Formatvorlagen

Wenn Sie das BoundingBox.cs Skript nur zuweisen, wird standardmäßig das Handle des HoloLens-Stils der 1. Generation angezeigt. Um HoloLens 2 Stilhandles zu verwenden, müssen Sie die richtigen Handgriffe und Materialien zuweisen.

Umgrenzungsfeld-Handle-Formatvorlagen

Im Folgenden finden Sie die Prefabs, Materialien und Skalierungswerte für die HoloLens 2 Formatbegrenzungsrahmenhandles. Dieses Beispiel finden Sie in der BoundingBoxExamples Szene.

HandStyles 2

Handles (Setup für HoloLens 2 Stil)

  • Griffmaterial: BoundingBoxHandleWhite.mat
  • Griffmaterial: BoundingBoxHandleBlueGrabbed.mat
  • Scale Handle Prefab: MRTK_BoundingBox_ScaleHandle.prefab
  • Scale Handle Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Maßstab Griffgröße: 0,016 (1,6 cm)
  • Scale Handle Collider Padding: 0,016 (macht den grabbbaren Collider etwas größer als das Visuelle des Handle)
  • Rotation Handle Prefab: MRTK_BoundingBox_RotateHandle.prefab
  • Drehgriffgröße: 0,016
  • Rotation Handle Collider Padding: 0,016 (macht den grabbbaren Collider etwas größer als das Handle-Visual)

Näherung (Setup für HoloLens 2 Stil)

Zeigen Und ausblenden Sie die Griffe mithilfe einer Animation basierend auf dem Abstand zu den Händen. Es verfügt über eine Zwei-Schritt-Skalierungsanimation.

Näherung
  • Näherungseffekt aktiv: Aktivieren der näherungsbasierten Handle-Aktivierung
  • Behandeln mittlerer Näherung: Abstand für die Skalierung im 1. Schritt
  • Handle Close Proximity: Abstand für die Skalierung im 2. Schritt
  • Far Scale: Standardwert der Handle-Ressource, wenn sich die Hände außerhalb des Bereichs der Interaktion mit dem Begrenzungsrahmen befinden (Abstand, der oben durch "Handle Medium Proximity" definiert ist. Verwenden Sie 0, um das Handle standardmäßig auszublenden.
  • Mittlere Skalierung: Skalierungswert des Handle-Medienobjekts, wenn sich die Hände innerhalb des Bereichs der Begrenzungsrahmeninteraktion befinden (Abstand, der oben durch "Handle Close Proximity" definiert wurde. Verwenden Sie 1, um die normale Größe anzuzeigen.
  • Close Scale( Close Scale): Skalierungswert des Handle-Medienobjekts, wenn sich die Hände innerhalb des Bereichs der Greiferinteraktion befinden (Entfernung, die oben durch "Handle Close Proximity" definiert ist). Verwenden Sie 1.x, um eine größere Größe anzuzeigen.

Verschieben eines Objekts mit einem Manipulationshandler

Ein Begrenzungsrahmen kann mit ManipulationHandler.cs kombiniert werden, um das Objekt mithilfe der Ferninteraktion verschiebbar zu machen. Der Manipulationshandler unterstützt sowohl ein- als auch zweihändige Interaktionen. Die Handverfolgung kann verwendet werden, um mit einem Objekt aus nächster Nähe zu interagieren.

Manipulationshandler

Damit sich die Begrenzungsrahmenränder beim Verschieben mit ManipulationHandlerder Ferninteraktion gleich verhalten, empfiehlt es sich, die Ereignisse für Bei Manipulation gestartet / bei Manipulation beendetBoundingBox.HighlightWires / BoundingBox.UnhighlightWires mit zu verbinden, wie im obigen Screenshot gezeigt.

Migrieren zum Begrenzungssteuerelement

Vorhandene Prefabs und Instanzen mithilfe des Begrenzungsrahmens können über das Migrationsfenster , das Teil des MRTK-Toolspakets ist, auf das neue Begrenzungssteuerelement aktualisiert werden.

Zum Aktualisieren einzelner Instanzen des Begrenzungsrahmens gibt es auch eine Migrationsoption im Eigenschafteninspektor der Komponente.

Migrieren von Begrenzungssteuerelementen