Bounds-Steuerelement – MRTK2

Bounds control

BoundsControl ist die neue Komponente für Manipulationsverhalten, die zuvor in BoundingBox gefunden wurde. Das Bounds-Steuerelement macht eine Reihe von Verbesserungen und Vereinfachungen im Setup und fügt neue Features hinzu. Diese Komponente ist ein Ersatz für das Begrenzungsfeld, das veraltet ist.

Das BoundsControl.cs Skript bietet grundlegende Funktionen zum Transformieren von Objekten in Mixed Reality. Ein Begrenzungssteuerelement zeigt ein Feld um das Hologramm an, um anzugeben, dass es interagiert werden kann. Ziehpunkte an den Ecken und Kanten des Felds ermöglichen die Skalierung, Drehung oder Übersetzung des Objekts. Das Bounds-Steuerelement reagiert auch auf benutzereingaben. Auf HoloLens 2 reagiert das Begrenzungssteuerelement beispielsweise auf die Fingernähe, wodurch visuelles Feedback bereitgestellt wird, um den Abstand vom Objekt zu erkennen. Alle Interaktionen und Visuellen können einfach angepasst werden.

Beispielszene

Beispiele für Begrenzungssteuerelementkonfigurationen finden Sie in der BoundsControlExamples Szene.

Bounds control Example

Inspector-Eigenschaften

Zielobjekt

Diese Eigenschaft gibt an, welches Objekt durch die Begrenzungssteuerelementbearbeitung transformiert wird. Wenn kein Objekt festgelegt ist, wird es standardmäßig für das Besitzerobjekt verwendet.

Aktivierungsverhalten

Es gibt mehrere Optionen zum Aktivieren der Begrenzungssteuerungsschnittstelle.

  • Aktivieren Beim Start: Bounds-Steuerelement wird sichtbar, sobald die Szene gestartet wurde.
  • Aktivieren Durch Näherung: Bounds-Steuerelement wird sichtbar, wenn eine artikulierte Hand nah am Objekt liegt.
  • Aktivieren von Zeiger: Bounds-Steuerelement wird sichtbar, wenn es von einem Handstrahlzeiger ausgerichtet wird.
  • Aktivieren Durch Näherung und Zeiger: Das Begrenzungssteuerelement wird sichtbar, wenn es von einem Handstrahlzeiger oder einer artikulierten Hand nah am Objekt ausgerichtet wird.
  • Manuell aktivieren: Das Bounds-Steuerelement wird nicht automatisch angezeigt. Sie können sie manuell über ein Skript aktivieren, indem Sie auf die BoundsControl.Active-Eigenschaft zugreifen.

Begrenzungen außer Kraft setzen

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

Feldabstand

Fügt der Kollidierung einen Abstand hinzu, der verwendet wird, um die Ausmaße des Steuerelements zu berechnen. Dies beeinflusst nicht nur die Interaktion, sondern auch die Visuellen.

Achse flachen

Gibt an, ob das Steuerelement in einer der Achsen abgeschärftet wird, wodurch es 2dimensionale und verworfende Manipulation entlang dieser Achse erfolgt. Dieses Feature kann für dünne Objekte wie Slates verwendet werden. Wenn die Flachachse auf " Flatten Auto" festgelegt ist, wählt das Skript automatisch die Achse mit der kleinsten Größe als flachste Achse aus.

Glättung

Der Glättungsabschnitt ermöglicht das Konfigurieren des Glättungsverhaltens für die Skalierung und Drehung des Steuerelements.

Visuals

Das Erscheinungsbild des Begrenzungssteuerelements kann konfiguriert werden, indem eine der entsprechenden visuellen Konfigurationen geändert wird. Visuelle Konfigurationen sind verknüpfte oder inlineierte skriptfähige Objekte und werden im Konfigurationsobjektabschnitt ausführlicher beschrieben.

Konfigurationsobjekte

Das Steuerelement enthält eine Reihe von Konfigurationsobjekten, die als skriptfähige Objekte gespeichert und zwischen verschiedenen Instanzen oder Prefabs freigegeben werden können. Konfigurationen können freigegeben und entweder als einzelne skriptfähige Objektdateien oder geschachtelte skriptfähige Ressourcen innerhalb von Prefabs verknüpft werden. Weitere Konfigurationen können auch direkt auf der Instanz definiert werden, ohne eine Verknüpfung mit einem externen oder geschachtelten skriptfähigen Objekt zu erstellen.

Der Begrenzungssteuerelementinspektor gibt an, ob eine Konfiguration als Teil der aktuellen Instanz freigegeben oder inlineiert wird, indem eine Meldung im Eigenschafteninspektor angezeigt wird. Darüber hinaus können freigegebene Instanzen nicht direkt im Eigenschaftenfenster des Bounds-Steuerelements bearbeitet werden, sondern stattdessen muss das Objekt, mit dem eine Verknüpfung hergestellt wird, direkt geändert werden, um versehentliche Änderungen an freigegebenen Konfigurationen zu vermeiden.

Derzeit bietet das Bounds-Steuerelement Konfigurationsobjekteoptionen für die folgenden Features:

Box-Konfiguration

Die Boxkonfiguration ist für das Rendern eines soliden Felds mit Grenzen verantwortlich, die über die Kollidierungsgröße und den Feldabstand definiert sind. Die folgenden Eigenschaften können eingerichtet werden:

  • Box-Material: definiert das Material, das auf das gerenderte Feld angewendet wird, wenn keine Interaktion stattfindet. Ein Feld wird nur gerendert, wenn dieses Material festgelegt ist.
  • Box grabbed material: material for the box when the user interags with the control by grabbing via near or far interaction.
  • Skalierung der flachen Achse: Eine Skalierung, die auf die Anzeige des Felds angewendet wird, wenn eine der Achsen flach ist.

Konfiguration von Skalierungshandpunkten

Diese Eigenschaftsschublade ermöglicht das Ändern des Verhaltens und der Visualisierung von Skalierungsziehpunkten des Begrenzungssteuerelements.

  • Griffmaterial: Material, das auf die Ziehpunkte angewendet wird.
  • Griff ziehmaterial: Material, das auf den Ziehpunkt angewendet wird.
  • Handle prefab: optional prefab für den Skalierungsziehpunkt. Wenn kein MRTK festgelegt ist, wird ein Cube als Standard verwendet.
  • Ziehpunktgröße: Größe des Skalierungsziehpunkts.
  • Collider padding: Padding to add to the handle collider.
  • Zeichnen Sie beim Bearbeiten Tether: Wenn aktiv eine Tetherlinie vom Anfang der Interaktion bis zur aktuellen Hand- oder Zeigerposition zeichnet.
  • Ziehpunkte ignorieren Collider: Wenn ein Collider hier verknüpft wird, ignorieren Handle alle Kollisionen mit diesem Collider.
  • Handle slate prefab: prefab to use for the handle when the control is flattened.
  • Skalierungspunkte anzeigen: Steuert die Sichtbarkeit des Handles.
  • Skalierungsverhalten: Kann auf eine einheitliche oder nicht einheitliche Skalierung festgelegt werden.

Drehpunktekonfiguration

Diese Konfiguration definiert das Drehpunktverhalten.

  • Griffmaterial: Material, das auf die Ziehpunkte angewendet wird.
  • Griff ziehmaterial: Material, das auf den Ziehpunkt angewendet wird.
  • Handle prefab: optional prefab für den Handle. Wenn kein MRTK festgelegt ist, wird eine Kugel als Standard verwendet.
  • Ziehpunktgröße: Größe des Ziehpunkts.
  • Collider padding: Padding to add to the handle collider.
  • Zeichnen Sie beim Bearbeiten Tether: Wenn aktiv eine Tetherlinie vom Anfang der Interaktion bis zur aktuellen Hand- oder Zeigerposition zeichnet.
  • Ziehpunkte ignorieren Collider: Wenn ein Collider hier verknüpft wird, ignorieren Handle alle Kollisionen mit diesem Collider.
  • Handle prefab collider type: collider type to be used with the created handle.
  • Zeigepunkt für X: steuert die Sichtbarkeit des Ziehpunkts für die X-Achse.
  • Zeigepunkt für Y: Steuert die Sichtbarkeit des Ziehpunkts für die Y-Achse.
  • Zeigepunkt für Z: steuert die Sichtbarkeit des Ziehpunkts für die Z-Achse.

Konfiguration von Übersetzungshandpunkten

Ermöglicht das Aktivieren und Konfigurieren von Übersetzungshandpunkten für das Begrenzungssteuerelement. Beachten Sie, dass übersetzungshandles pro Standard deaktiviert sind.

  • Griffmaterial: Material, das auf die Ziehpunkte angewendet wird.
  • Griff ziehmaterial: Material, das auf den Ziehpunkt angewendet wird.
  • Handle prefab: optional prefab für den Handle. Wenn kein MRTK festgelegt ist, wird eine Kugel als Standard verwendet.
  • Ziehpunktgröße: Größe des Ziehpunkts.
  • Collider padding: Padding to add to the handle collider.
  • Zeichnen Sie beim Bearbeiten Tether: Wenn aktiv eine Tetherlinie vom Anfang der Interaktion bis zur aktuellen Hand- oder Zeigerposition zeichnet.
  • Ziehpunkte ignorieren Collider: Wenn ein Collider hier verknüpft wird, ignorieren Handle alle Kollisionen mit diesem Collider.
  • Behandeln Sie den Typ "Prefab collider": Collider-Typ, der mit dem erstellten Handle verwendet werden soll.
  • Zeigepunkt für X: steuert die Sichtbarkeit des Handles für die X-Achse.
  • Zeigepunkt für Y: steuert die Sichtbarkeit des Handles für die Y-Achse.
  • Zeigepunkt für Z: steuert die Sichtbarkeit des Handles für Z-Achse.

Die Verknüpfungskonfiguration ermöglicht das Drahtframefeature des Gebundenen Steuerelements. Die folgenden Eigenschaften können konfiguriert werden:

  • Drahtrahmenmaterial: Das Material, das auf das Drahtrahmengitter angewendet wird.
  • Drahtrahmenrandradius: die Stärke des Drahtrahmens.
  • Drahtrahmen-Form: Form des Drahtrahmens kann entweder kubisch oder zylindrisch sein.
  • Drahtrahmen anzeigen: Steuert die Sichtbarkeit des Drahtrahmens.

Näherungseffektkonfiguration

Anzeigen und Ausblenden der Griffe mit Animation basierend auf dem Abstand zu den Händen. Es verfügt über eine zweistufige Skalierungsanimation. Standardeinstellungen werden auf HoloLens 2 Stilverhalten festgelegt.

Bounds control Proximity
  • Näherungseffekt aktiv: Aktivieren der Aktivierung von näherungsbasiertem Handle
  • Objekt Mittlere Näherung: Abstand für die 1. Schrittskalierung
  • Objekt näherung: Abstand für die Skalierung des 2. Schritts
  • Far Scale: Standardwert des Handle-Asset, wenn die Hände außerhalb des Bereichs der Begrenzungssteuerungsinteraktion sind (oben durch "Behandeln mittlerer Näherung" definierter Abstand. Verwenden Von 0 zum Ausblenden des Handle standardmäßig)
  • Mittlere Skalierung: Skalierungswert des Handle-Asset, wenn sich die Hände innerhalb des Bereichs der Begrenzungssteuerungsinteraktion befinden (oben durch "Handle Close Näherung" definierter Abstand. Verwenden Sie 1, um die normale Größe anzuzeigen)
  • Schließende Skalierung: Skalierungswert des Handle-Asset, wenn sich die Hände innerhalb des Bereichs der Grabinteraktion befinden (abstand, der oben durch "Handle Close Näherung" definiert ist. Verwenden Sie 1.x, um größere Größe anzuzeigen)
  • Far Grow Rate: Bewerten Sie eine näherungskalierte Objektskala, wenn die Hand von mittlerer bis weit näherr Nähe wechselt.
  • Mittlere Vergrößerungsrate: Bewerten Sie eine näherungskalierte Objektskala, wenn die Hand von mittlerer bis näherr Nähe wechselt.
  • Close Grow Rate: Rate a näher skalierte Objekte, wenn die Hand von näherr Nähe zum Objektcenter wechselt.

Einschränkungssystem

Das Bounds-Steuerelement unterstützt die Verwendung des Einschränkungs-Managers zum Einschränken oder Ändern des Übersetzungs-, Dreh- oder Skalierungsverhaltens während der Verwendung von Begrenzungssteuerelementen.

Der Eigenschafteninspektor zeigt alle verfügbaren Einschränkungsmanager an, die an dasselbe Spielobjekt in einer Dropdownliste angefügt sind, mit einer Option zum Scrollen und Hervorheben des ausgewählten Einschränkungs-Managers.

Bounds control Constraints

Ereignisse

Bounds-Steuerelement stellt die folgenden Ereignisse bereit. In diesem Beispiel werden diese Ereignisse zum Wiedergeben von Audiofeedback verwendet.

  • Drehung gestartet: Ausgelöst beim Starten der Drehung.
  • Drehung beendet: Ausgelöst, wenn Drehung beendet wird.
  • Skalierung gestartet: Wird ausgelöst, wenn die Skalierung gestartet wird.
  • Skalierung beendet: Wird ausgelöst, wenn die Skalierung beendet wird.
  • Übersetzung gestartet: Wird ausgelöst, wenn die Übersetzung gestartet wird.
  • Übersetzt beendet: Wird ausgelöst, wenn die Übersetzung beendet wird.
Bounds control Events

Elastics (Experimental)

Elastics können beim Bearbeiten von Objekten über das Begrenzungssteuerelement verwendet werden. Beachten Sie, dass das Elastics-System immer noch im experimentellen Zustand ist. Zum Aktivieren von Elastics verknüpfen Sie entweder eine vorhandene Elastics-Manager-Komponente oder erstellen und verknüpfen sie einen neuen Elastics-Manager über die Add Elastics Manager Schaltfläche.

Bounds control Elastics

Behandeln von Formatvorlagen

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

Bounds Control Handle Styles 2

Nachfolgend finden Sie die Präfabs, Materialien und die Skalierungswerte für die HoloLens 2 Formatvorlagensteuerelemente. Dieses Beispiel finden Sie in der BoundsControlExamples Szene.

Bounds control HandleStyles

Handle (Setup für HoloLens 2 Formatvorlage)

  • Handle Material: BoundingBoxHandleWhite.mat
  • Behandeln von Greifmaterial: BoundingBoxHandleBlueGrabbed.mat
  • Scale Handle Prefab: MRTK_BoundingBox_ScaleHandle.prefab
  • Scale Handle Slate Prefab: MRTK_BoundingBox_ScaleHandle_Slate.prefab
  • Skalierungshandpunktgröße: 0,016 (1,6cm)
  • Scale Handle Collider Padding: 0.016 (macht die greifbare Kollidierung etwas größer als das visuelle Behandeln)
  • Drehpunkt Prefab: MRTK_BoundingBox_RotateHandle.prefab
  • Drehpunktgröße: 0.016
  • Drehpunkt Collider Padding: 0.016 (macht den greifbaren Kollidieren leicht größer als der visuelle Griff)

Transformationsänderungen mit Objektmanipulator

Ein Begrenzungssteuerelement kann in Kombination ObjectManipulator.cs mit bestimmten Arten von Manipulationen (z. B. Verschieben des Objekts) verwendet werden, ohne handlen zu können. Der Manipulationshandler unterstützt sowohl eine als auch zweihändige Interaktion. Die Handverfolgung kann verwendet werden, um mit einem Objekt zu interagieren.

Bounds control Object Manipulator

Damit die Begrenzungssteuerungsränder sich auf dieselbe Weise verhalten können, wenn sie ObjectManipulatormit der Weitinteraktion verschoben wird, wird empfohlen, die Ereignisse für "On Manipulation Gestartet auf Manipulation gestartet / " zu BoundsControl.HighlightWires / BoundsControl.UnhighlightWires verbinden, wie im obigen Screenshot dargestellt.

Hinzufügen und Konfigurieren eines Begrenzungssteuerelements mithilfe des Unity Inspector

  1. Hinzufügen von Box Collider zu einem Objekt
  2. Zuweisen BoundsControl eines Skripts zu einem Objekt
  3. Konfigurieren von Optionen wie "Aktivierung"-Methoden (siehe Abschnitt " Inspector-Eigenschaften " unten)
  4. (Optional) Zuweisen von Prefabs und Materialien für ein HoloLens 2 Style Bounds-Steuerelement (siehe Abschnitt "Behandeln von Formatvorlagen" unten)

Hinweis

Verwenden Sie das Feld "Zielobjekt " und "Bounds Override " im Inspektor, um bestimmte Objekte zuzuweisen und im Objekt mit mehreren untergeordneten Komponenten zu kollidieren.

Bounds Control

So fügen Sie ein Gebundenes-Steuerelement im Code hinzu und konfigurieren

  1. Instanziierter Cube GameObject

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

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Konfigurieren von Optionen entweder direkt auf dem Steuerelement oder über eine der skriptfähigen Konfigurationen (siehe Abschnitt "Inspektoreigenschaften und Konfigurationen" unten)

    // Change activation method
    boundsControl.BoundsControlActivation = BoundsControlActivationType.ActivateByProximityAndPointer;
    // Make the scale handles large
    boundsControl.ScaleHandlesConfig.HandleSize = 0.1f;
    // Hide rotation handles for x axis
    boundsControl.RotationHandlesConfig.ShowRotationHandleForX = false;
    
  4. (Optional) Weisen Sie Prefabs und Materialien für ein HoloLens 2 Formatbindungssteuerelement zu. Dies erfordert weiterhin Zuordnungen durch den Inspektor, da die Materialien und Prefabs dynamisch geladen werden sollten.

Hinweis

Die Verwendung des Ordners "Ressourcen" oder " Shader". Suchen nach dynamisch geladenen Shadern wird nicht empfohlen, da Shader-Permutationen zur Laufzeit fehlen.

BoxDisplayConfiguration boxConfiguration = boundsControl.BoxDisplayConfig;
boxConfiguration.BoxMaterial = [Assign BoundingBox.mat]
boxConfiguration.BoxGrabbedMaterial = [Assign BoundingBoxGrabbed.mat]
ScaleHandlesConfiguration scaleHandleConfiguration = boundsControl.ScaleHandlesConfig;
scaleHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
scaleHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
scaleHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_ScaleHandle.prefab]
scaleHandleConfiguration.HandleSlatePrefab = [Assign MRTK_BoundingBox_ScaleHandle_Slate.prefab]
scaleHandleConfiguration.HandleSize = 0.016f;
scaleHandleConfiguration.ColliderPadding = 0.016f;
RotationHandlesConfiguration rotationHandleConfiguration = boundsControl.RotationHandlesConfig;
rotationHandleConfiguration.HandleMaterial = [Assign BoundingBoxHandleWhite.mat]
rotationHandleConfiguration.HandleGrabbedMaterial = [Assign BoundingBoxHandleBlueGrabbed.mat]
rotationHandleConfiguration.HandlePrefab = [Assign MRTK_BoundingBox_RotateHandle.prefab]
rotationHandleConfiguration.HandleSize = 0.016f;
rotationHandleConfiguration.ColliderPadding = 0.016f;

Beispiel: Festlegen von Mindest-, Maximalgrenzen-Steuerelementskala mithilfe von MinMaxScaleConstraint

Wenn Sie die minimale und maximale Skalierung festlegen möchten, fügen Sie ein MinMaxScaleConstraint Steuerelement an. Wenn das Bounds-Steuerelement automatisch anfügen und den Einschränkungs-Manager aktiviert, wird der MinMaxScaleConstraint automatisch auf die Transformationsänderungen angewendet, sobald er angefügt und konfiguriert ist.

Sie können auch MinMaxScaleConstraint verwenden, um mindest- und maximale Skalierung für ObjectManipulator.

GameObject cube = GameObject.CreatePrimitive(PrimitiveType.Cube);
bcontrol = cube.AddComponent<BoundsControl>();
// Important: BoundsControl creates a constraint manager on start if one does not exist.
// There's no need to manually attach a constraint manager.
MinMaxScaleConstraint scaleConstraint = bcontrol.gameObject.AddComponent<MinMaxScaleConstraint>();
scaleConstraint.ScaleMinimum = 1f;
scaleConstraint.ScaleMaximum = 2f;

Beispiel: Hinzufügen von Begrenzungssteuerelementen um ein Spielobjekt

Um ein Gebundenes Steuerelement um ein Objekt hinzuzufügen, fügen Sie einfach eine BoundsControl Komponente hinzu:

private void PutABoundsControlAroundIt(GameObject target)
{
   target.AddComponent<BoundsControl>();
}

Migrieren aus dem Begrenzungsfeld

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

Für das Upgrade einzelner Instanzen des Begrenzungsfelds gibt es auch eine Migrationsoption innerhalb des Eigenschafteninspektors der Komponente.

Bounds control Migrate

Siehe auch