Objektmanipulator — MRTK3

Objektmanipulator

ObjectManipulator ermöglicht die intuitive Bearbeitung von Objekten im 3D-Raum mit beliebigen Eingabegeräten oder Modalitäten. Es erfüllt eine ähnliche Aufgabe wie der XRI XRGrabInteractable, bietet aber zusätzliche Funktionen und Mixed Reality-spezifische Interaktionen. Obwohl XRGrabInteractable vollständig mit unseren Interaktoren kompatibel ist (und das Gegenteil ist ebenso wahr), empfiehlt es sich dennoch, unsere Implementierung zu verwenden, um das beste Ergebnis zu erzielen.

Hinweis

ObjectManipulator ist speziell für das Bearbeiten von 3D-Objekten direkt und intuitiv ausgelegt. Wenn Sie nach allgemeinen Benutzeroberflächeninteraktionen wie Schiebereglern oder Schaltflächen suchen, lesen Sie stattdessen unsere Artikel zu Schiebereglern und Schaltflächen. Vermeiden Sie die Verwendung von ObjectManipulator zum Schreiben von Mikrointeraktionen.

Aufbau

In MRTK v2 wurde der Großteil der komplexen Logik und Mathematik für die verschiedenen Eingabearten von ObjectManipulator selbst ausgeführt. Für jeden Interaktionstyp musste ein separater Codepfad gepflegt werden, was zu weniger Flexibilität bei der Einführung neuer Interaktionstypen führte. Bei MRTK3 ist der Interaktor dafür verantwortlich, wie eine bestimmte Art von Eingabe in eine Manipulation umgesetzt wird. ObjectManipulator hört einfach auf diese Interaktoren und wendet die relevante Transformation auf das Objekt an. Infolgedessen ist ObjectManipulator in MRTK3 wesentlich einfacher und kleiner im Umfang. Siehe die Interaktor-Architektur für eine Beschreibung, wie Interaktoren über ihre angehängten Transformationen kommunizieren.

n-händige Manipulationen

ObjectManipulator unterstützt eine beliebige Anzahl teilnehmender Interaktoren und ermöglicht ein verallgemeinerbares Interaktionsverhalten über ein-, zwei- und sogar n-händige Manipulationen hinweg. Im Allgemeinen wird der geometrische Schwerpunkt der AttachTransforms aller teilnehmenden Interaktoren für mehrhändige Interaktionen verwendet. Als XRI-Interaktionsobjekt ist es mit jeder Art von Interaktor kompatibel, der eine ordnungsgemäße Anfügen-Transformation übermittelt.

Wenn Sie keine mehrhändigen Manipulationen zulassen möchten, setzen Sie das XRI Selection Mode auf Single. Wir weisen dieser Eigenschaft im Inspektor den spezifischeren Namen Multiselect Mode zu, um Verwechslungen mit unserem MRTK Selection Mode zu vermeiden, welcher verwendet wird, um anzugeben, ob ein interaktives Objekt umschaltbar ist (siehe die Dokumentation zu Schaltflächen für weitere Erläuterungen.)

Multiselect-Modus

Einschränkungen

ObjectManipulator verwendet die Constraints-API, um Manipulationen einzuschränken. Weitere Informationen finden Sie in der Dokumentation zu Einschränkungen.

Manipulationslogik-Injektion

Entwickler können das Manipulationsverhalten von ObjectManipulator anpassen, ohne das Skript selbst ableiten oder anderweitig ändern zu müssen. Schreiben Sie einfach einen neuen ManipulationLogic<T> , und geben Sie den Typ im Inspektor mit der -Eigenschaft an ManipulationLogicTypes .

Auf ähnliche Weise können Entwickler das Glättungsverhalten anpassen, indem sie eine neue Implementierung von ITransformSmoothingLogic schreiben und den Typ im Inspektor mit der TransformSmoothingLogicType -Eigenschaft angeben.

Wichtig

Wenn Sie feststellen, dass Sie für eine neue Art von Interaktion oder Eingabegerät neue Arten von Manipulationslogik schreiben müssen, sind Sie wahrscheinlich auf dem falschen Weg. Die vorhandene Manipulationslogik sollte für beliebige Eingabetypen funktionieren, solange die Anfügen-Transformation ordnungsgemäß ist. Erwägen Sie stattdessen, einen neuen Interaktor anzupassen oder zu schreiben. Lesen Sie die Dokumentation zur Interaktor-Architektur und die Dokumentation zur Architektur interaktionsfähiger Elemente, um mehr darüber zu erfahren, wie Sie eine gut funktionierende Interaktionslogik schreiben können.