Begrenzungssteuerelement – MRTK2

Begrenzungssteuerelement

BoundsControl ist die neue Komponente für das Manipulationsverhalten, die zuvor in BoundingBox zu finden war. Die Begrenzungssteuerung bietet eine Reihe von Verbesserungen und Vereinfachungen bei der Einrichtung und fügt neue Features hinzu. Diese Komponente ist ein Ersatz für den Begrenzungsrahmen, der 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 das Skalieren, Drehen oder Übersetzen des Objekts. Das Begrenzungssteuerelement reagiert auch auf Benutzereingaben. Auf HoloLens 2 reagiert das Begrenzungssteuerelement beispielsweise auf die Fingernähe und gibt visuelles Feedback, um die Entfernung zum Objekt zu erkennen. Alle Interaktionen und Visuals können einfach angepasst werden.

Beispielszene

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

Beispiel für das Bounds-Steuerelement

Eigenschaften des Inspektors

Zielobjekt

Diese Eigenschaft gibt an, welches Objekt durch die Manipulation des Begrenzungssteuerelements transformiert wird. Wenn kein Objekt festgelegt ist, wird standardmäßig das Besitzerobjekt verwendet.

Aktivierungsverhalten

Es gibt mehrere Optionen zum Aktivieren der Begrenzungssteuerungsschnittstelle.

  • Bei Start aktivieren: Das Begrenzungssteuerelement wird sichtbar, sobald die Szene gestartet wird.
  • Durch Näherung aktivieren: Das Begrenzungssteuerelement wird sichtbar, wenn sich eine artikulierte Hand in der Nähe des Objekts befindet.
  • Durch Zeiger aktivieren: Das Steuerelement Bounds wird sichtbar, wenn es von einem Handstrahlzeiger als Ziel verwendet wird.
  • Durch Näherung und Zeiger aktivieren: Das Begrenzungssteuerelement wird sichtbar, wenn es von einem Handstrahlzeiger oder einer handgelenkten Hand in der Nähe des Objekts ausgerichtet wird.
  • Manuell aktivieren: Das Begrenzungssteuerelement wird nicht automatisch sichtbar. Sie können sie manuell über ein Skript aktivieren, indem Sie auf die eigenschaft boundsControl.Active zugreifen.

Außerkraftsetzung von Begrenzungen

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

Boxabstand

Fügt den Collidergrenzen, die zum Berechnen der Ausdehnungen des Steuerelements verwendet werden, einen Abstand hinzu. Dies beeinflusst nicht nur die Interaktion, sondern auch die Visuellen.

Verflachte Achse

Gibt an, ob das Steuerelement in einer der Achsen abgeflacht ist, sodass es zweidimensional ist und die Bearbeitung entlang dieser Achse aufgehoben wird. Dieses Feature kann für schlanke Objekte wie Slates verwendet werden. Wenn die Achse "Flatten" auf "Flatten Auto " festgelegt ist, wählt das Skript automatisch die Achse mit der kleinsten Ausdehnung als flache Achse aus.

Glättung

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

Visuals

Die Darstellung des Begrenzungssteuerelements kann durch Ändern einer der entsprechenden Visualkonfigurationen konfiguriert werden. Visuelle Konfigurationen sind entweder verknüpfte oder inline skriptfähige Objekte und werden im Abschnitt konfigurationsobjekt ausführlicher beschrieben.

Konfigurationsobjekte

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

Der Inspektor für die Begrenzungssteuerung gibt an, ob eine Konfiguration freigegeben oder als Teil der aktuellen instance inline ausgeführt wird, indem eine Meldung im Eigenschafteninspektor angezeigt wird. Darüber hinaus können freigegebene Instanzen nicht direkt im Eigenschaftenfenster des Begrenzungssteuerelements selbst bearbeitet werden, sondern das Objekt, mit dem eine Verknüpfung hergestellt wird, muss direkt geändert werden, um versehentliche Änderungen an freigegebenen Konfigurationen zu vermeiden.

Derzeit bietet das Begrenzungssteuerelement Konfigurationsoptionen für die folgenden Features:

Box-Konfiguration

Die Boxkonfiguration ist für das Rendern eines durchgezogenen Felds mit Begrenzungen verantwortlich, die über die Collidergröße und den Boxabstand definiert sind. Die folgenden Eigenschaften können eingerichtet werden:

  • Boxmaterial: 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 für die Box, wenn der Benutzer mit dem Steuerelement interagiert, indem er über eine Nah- oder Ferninteraktion greift.
  • Verkleinerte Achsenanzeigeskala: Eine Skalierung, die auf die Boxanzeige angewendet wird, wenn eine der Achsen abgeflacht ist.

Konfiguration von Skalierungshandles

Mit diesem Eigenschaftenschubladen können Sie das Verhalten und die Visualisierung von Skalierungshandles der Begrenzungssteuerung ändern.

  • Griffmaterial: Material, das auf die Ziehpunkte angewendet wird.
  • Griffmaterial: Material, das auf den Greifgriff aufgetragen wird.
  • Handle Prefab: optionales Prefab für das Skalierungshandle. Wenn nicht festgelegt ist, verwendet MRTK einen Cube als Standard.
  • Handle-Größe: Größe des Skalierungshandles.
  • Collider-Abstand: Auffüllung, die dem Handle-Collider hinzugefügt werden soll.
  • Tether beim Bearbeiten zeichnen: Wenn aktiv eine Tetherlinie vom Anfangspunkt der Interaktion bis zur aktuellen Hand- oder Zeigerposition zeichnet.
  • Handles ignorieren Collider: Wenn hier ein Collider verknüpft wird, ignorieren Handles jede Kollision mit diesem Collider.
  • Handle slate prefab: prefab to use for the handle when the control is flattened.
  • Skalierungshandles anzeigen: Steuert die Sichtbarkeit des Handles.
  • Skalierungsverhalten: kann auf eine einheitliche oder nicht einheitliche Skalierung festgelegt werden.

Konfiguration von Drehhandles

Diese Konfiguration definiert das Verhalten des Drehhandles.

  • Griffmaterial: Material, das auf die Ziehpunkte angewendet wird.
  • Griffmaterial: Material, das auf den Greifgriff aufgetragen wird.
  • Handle Prefab: optionales Prefab für das Handle. Wenn nicht festgelegt ist, verwendet MRTK eine Kugel als Standard.
  • Handle-Größe: Größe des Handles.
  • Collider-Abstand: Auffüllung, die dem Handle-Collider hinzugefügt werden soll.
  • Tether beim Bearbeiten zeichnen: Wenn aktiv eine Tetherlinie vom Anfangspunkt der Interaktion bis zur aktuellen Hand- oder Zeigerposition zeichnet.
  • Handles ignorieren Collider: Wenn hier ein Collider verknüpft wird, ignorieren Handles jede Kollision mit diesem Collider.
  • Handle prefab collider type: collider type to be used with the created handle handle collider type to be used with the created handle handle.
  • Zeigehandle für X: Steuert die Sichtbarkeit des Handles für die X-Achse.
  • Zeigehandle für Y: Steuert die Sichtbarkeit des Handles für die Y-Achse.
  • Zeigehandle für Z: steuert die Sichtbarkeit des Handles für die Z-Achse.

Konfiguration von Übersetzungshandles

Ermöglicht das Aktivieren und Konfigurieren von Übersetzungshandles für die Begrenzungssteuerung. Beachten Sie, dass Übersetzungshandles standardmäßig deaktiviert sind.

  • Griffmaterial: Material, das auf die Ziehpunkte angewendet wird.
  • Griffmaterial: Material, das auf den Greifgriff aufgetragen wird.
  • Handle Prefab: optionales Prefab für das Handle. Wenn nicht festgelegt ist, verwendet MRTK eine Kugel als Standard.
  • Handle-Größe: Größe des Handles.
  • Collider-Abstand: Auffüllung, die dem Handle-Collider hinzugefügt werden soll.
  • Zeichnen eines Tethers beim Bearbeiten: Wenn aktiv eine Tetherlinie vom Anfangspunkt der Interaktion bis zur aktuellen Hand- oder Zeigerposition zeichnet.
  • Handles ignore collider: Wenn ein Collider hier verknüpft wird, ignorieren Handles jede Kollision mit diesem Collider.
  • Handle prefab collider type: collider type to be used with the created handle handle prefab collider type to be used with the created handle handle.
  • Zeigehandle für X: Steuert die Sichtbarkeit des Handles für die X-Achse.
  • Zeigehandle für Y: Steuert die Sichtbarkeit des Handles für die Y-Achse.
  • Zeigehandle für Z: Steuert die Sichtbarkeit des Handles für die Z-Achse.

Die Verknüpfungskonfiguration aktiviert das Wireframefeature des Begrenzungssteuerelements. Die folgenden Eigenschaften können konfiguriert werden:

  • Wireframematerial: Das Material, das auf das Drahtgitter aufgetragen wird.
  • Drahtrahmenrandradius: Die Stärke des Drahtrahmens.
  • Drahtmodellform: Die Form des Drahtrahmens kann entweder kubisch oder zylindrisch sein.
  • Wireframe anzeigen: Steuert die Sichtbarkeit des Wireframes.

Näherungseffektkonfiguration

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. Die Standardwerte sind auf HoloLens 2 Stilverhalten festgelegt.

Begrenzungssteuerelement Näherung
  • Näherungseffekt aktiv: Aktivieren der näherungsbasierten Handle-Aktivierung
  • Objekt mittlere Nähe: Abstand für die Skalierung im 1. Schritt
  • Objektnähe: Abstand für die Skalierung im 2. Schritt
  • Fernskalierung: Standardwert des Handle-Assets, wenn sich die Hände außerhalb des Bereichs der Interaktion des Begrenzungssteuerelements befinden (Abstand, der oben durch "Handle Medium Proximity" definiert ist. Verwenden Sie 0, um das Handle standardmäßig auszublenden.
  • Mittlere Skalierung: Skalieren Sie den Wert des Handle-Assets, wenn sich die Hände innerhalb des Bereichs der Interaktion des Begrenzungssteuerelements befinden (Abstand, der oben durch "Handle Close Proximity" definiert ist. Verwenden Sie 1, um die normale Größe anzuzeigen.
  • Close Scale: Skalieren Sie den Wert des Handle-Assets, wenn sich die Hände innerhalb des Bereichs der Interaktion mit dem Greifer befinden (Abstand, der oben durch "Handle Close Proximity" definiert ist. Verwenden Sie 1.x, um eine größere Größe anzuzeigen.
  • Far Grow Rate: Bewerten Sie eine näherungsskalierte Objektskalierung, wenn sich die Hand von mittlerer zu weiter Nähe bewegt.
  • Mittlere Vergrößerungsrate: Bewerten Sie die Skalierung eines näherungsskalierten Objekts, wenn sich die Hand von mittlerer nähe zu nah bewegt.
  • Close Grow Rate: Bewerten Sie Skalierungen eines näherungsskalierten Objekts, wenn sich die Hand von der Nähe zum Objektzentrum bewegt.

Einschränkungssystem

Das Bounds-Steuerelement unterstützt die Verwendung des Einschränkungs-Managers zum Einschränken oder Ändern des Übersetzungs-, Rotations- oder Skalierungsverhaltens bei Verwendung von Begrenzungssteuerelementhandles.

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

Einschränkungen des Begrenzungssteuerelements

Ereignisse

Das Bounds-Steuerelement 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 beendet wird.
  • Skalierung gestartet: Wird ausgelöst, wenn die Skalierung beginnt.
  • Skalierung beendet: Wird ausgelöst, wenn die Skalierung beendet wird.
  • Übersetzung gestartet: Wird ausgelöst, wenn die Übersetzung beginnt.
  • Übersetzung beendet: Wird ausgelöst, wenn die Übersetzung beendet wird.
Ereignisse des Begrenzungssteuerelements

Elastische Datenbanken (Experimentell)

Elastische Datenbanken können beim Bearbeiten von Objekten über das Begrenzungssteuerelement verwendet werden. Beachten Sie, dass sich das Elastische System noch im experimentellen Zustand befindet. Um elastische Datenbanken zu aktivieren, verknüpfen Sie entweder eine vorhandene Elastics-Manager-Komponente oder erstellen und verknüpfen sie über die Add Elastics Manager Schaltfläche einen neuen Elastics-Manager.

Bounds-Steuerelement Elastics

Behandeln von Formatvorlagen

Wenn Sie das BoundsControl.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.

Begrenzungs-Steuerelementhandlestile 2

Im Folgenden finden Sie die Prefabs, Materialien und Skalierungswerte für die HoloLens 2 Formatgrenzen-Steuerelementhandles. Dieses Beispiel finden Sie in der BoundsControlExamples Szene.

Bounds-Steuerelement HandleStyles

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)

Transformationsänderungen mit Objektmanipulator

Ein Begrenzungssteuerelement kann in Kombination mit ObjectManipulator.cs verwendet werden, um bestimmte Manipulationstypen (z. B. Das Verschieben des Objekts) ohne Verwendung von Handles zu ermöglichen. Der Manipulationshandler unterstützt sowohl Ein- als auch Zweihandinteraktionen. Die Handnachverfolgung kann verwendet werden, um mit einem Objekt aus nächster Nähe zu interagieren.

Begrenzungssteuerelement Objektmanipulator

Damit sich die Begrenzungs-Steuerelementränder beim Verschieben mit ObjectManipulatorder Ferninteraktion auf die gleiche Weise verhalten, wird empfohlen, die Ereignisse für Bei Bearbeitung gestartet / beiBearbeitung beendetBoundsControl.HighlightWires / BoundsControl.UnhighlightWires mit zu verbinden, wie im screenshot oben gezeigt.

Hinzufügen und Konfigurieren eines Begrenzungssteuerelements mithilfe von Unity Inspector

  1. Hinzufügen von Box Collider zu einem Objekt
  2. Zuweisen BoundsControl 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 Stilgrenzensteuerelements (siehe Abschnitt Umgangsstile 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.

Bounds-Steuerelement

Hinzufügen und Konfigurieren eines Begrenzungssteuerelements im Code

  1. Instanziieren des Cubes GameObject

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

    private BoundsControl boundsControl;
    boundsControl = cube.AddComponent<BoundsControl>();
    
  3. Konfigurieren Sie Optionen entweder direkt im 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 Formatgrenzensteuerelement 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.

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 der Steuerelementskalierung für minimale, maximale Begrenzungen mithilfe von MinMaxScaleConstraint

Um die minimale und maximale Skalierung festzulegen, fügen Sie dem Steuerelement eine an MinMaxScaleConstraint . Da das Begrenzungssteuerelement den Einschränkungs-Manager automatisch anfügt und aktiviert, wird der MinMaxScaleConstraint automatisch auf die Transformationsänderungen angewendet, sobald er angefügt und konfiguriert wird.

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

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 eines Begrenzungssteuerelements um ein Spielobjekt

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

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

Migrieren aus Begrenzungsrahmen

Vorhandene Prefabs und Instanzen, die das Begrenzungsfeld verwenden, 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.

Bounds-Steuerelement Migrate

Weitere Informationen