Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Handcoach ist eine 3D-modellierte Hand, die ausgelöst wird, wenn das System die Hände des Benutzers nicht erkennt. Dies wird als "Unterrichtskomponente" implementiert, die dem Benutzer hilft, den Benutzer zu leiten, wenn die Geste nicht gelehrt wurde. Wenn Benutzer die angegebene Geste für einen bestimmten Zeitraum nicht ausgeführt haben, werden die Hände mit einer Verzögerung schleifen. Handcoach könnte verwendet werden, um das Drücken einer Taste oder das Aufnehmen eines Hologramms darzustellen.
Das aktuelle Interaktionsmodell stellt eine Vielzahl von Gestensteuerelementen dar, z. B. Bildlauf, Fernauswahl und Fast-Tippen. Im Folgenden finden Sie eine vollständige Liste der vorhandenen Hand Coach-Beispiele:
- Nah tippen – Wird für Schaltflächen oder nahe interagierende Objekte verwendet
- Far Select – Wird für Objekte verwendet, die weit entfernt sind
- Move – Wird verwendet, um ein Hologramm im Raum zu verschieben
- Drehen – Wird verwendet, um zu zeigen, wie Hologramme oder Objekte gedreht werden.
- Skalieren : Wird verwendet, um zu zeigen, wie Hologramme so bearbeitet werden, dass sie größer oder kleiner sind
- Hand flip – Wird zum Aufrufen eines Ui-Startbereichs oder handmenüs verwendet.
- Palm up – Wird für Kolibrimomente in der Out-of-the-Box-Erfahrung verwendet. Ein weiterer Vorschlag könnte das Aufrufen eines Ui-Startbereichs sein.
- Scrollen – Wird zum Scrollen einer Liste oder eines langen Dokuments verwendet.
Beispielszene
Beispiele finden Sie in der HandCoachExample-Szene unter: MixedRealityToolkit.Examples/Experimental/HandCoach/Scenes
Hand 3D-Ressourcen
Sie finden die Ressourcen unter MixedRealityToolkit.SDK/Experimental/HandCoach.
Qualität
Wenn Sie Verzerrungen am skinned Mesh bemerken, müssen Sie sicherstellen, dass Ihr Projekt die richtige Anzahl von Gelenken verwendet.
Wechseln Sie zu Unitys Projekteinstellungen > bearbeiten > Qualität > Andere > Mischungsgewichtungen. Stellen Sie sicher, dass "4 Knochen" ausgewählt sind, um Glatte Gelenke zu sehen.
Skripts
Interaktionshinweis
Das InteractionHint.cs Skript bietet Wrapperfunktionen zum Auslösen von Animationen und Einblendungen für das Handgerät.
Einrichten eines Interaktionshinweises
Um einen Interaktionshinweis einzurichten, wird empfohlen, die bereitgestellten Prefabs "StaticHandCoachRoot_L.prefab" und "StaticHandCoachRoot_R.prefab" zu verwenden. Dieses Prefab enthält das InteractionHint-Skript und das Hand-Rig sowie die richtige Hierarchie, um sicherzustellen, dass die bereitgestellten Hinweisanimationen wie beabsichtigt funktionieren. Andernfalls müssen Sie das Skript auf einem gameObject platzieren, das von Ihrem Handgerät mit Animator um eine übergeordnete Ebene höher liegt.
Inspektoreigenschaften
HideIfHandTracked Dieser boolesche Wert gibt an, ob der Zustand der Handverfolgung verwendet werden soll, um Visuals auszublenden, wenn die Hände eines Benutzers nachverfolgt werden. Wenn dies auf false festgelegt ist, wird nur die Skripteigenschaft "customShouldHideVisuals" verwendet, um zu bestimmen, ob der Hinweis ausgeblendet werden soll.
MinDelay Diese Eigenschaft gibt die minimale Verzögerung für die Anzeige der Visuals an. Standardmäßig werden die Visuellen für die Hand nach so vielen Sekunden angezeigt, wenn die Hände des Benutzers nicht nachverfolgt werden.
MaxDelay Diese Eigenschaft gibt die maximale Verzögerung für die Anzeige der Visuals an. Standardmäßig werden die Visuellen für die Hand nach so vielen Sekunden angezeigt, auch wenn die Hände des Benutzers nachverfolgt werden.
UseMaxTimer Wenn dieser boolesche Wert auf false festgelegt ist, deaktiviert er den maximalen Timer und lässt nur zu, dass der Handhinweis angezeigt wird, wenn die Hände des Benutzers nicht sichtbar sind oder die benutzerdefinierte Bedingung false zurückgibt.
Wiederholt Diese Eigenschaft steuert, wie oft die Hinweisanimation wiedergegeben wird, wenn der min- oder max-Timer überschritten wurde. Der Hinweis blendet dann aus und wartet erneut auf die Verzögerung.
AutoAktivieren Wenn dieser boolesche Wert auf true festgelegt ist, wird der Hinweis automatisch durch die Timerlogik ausgeführt, wenn das GameObject des Skripts in der Hierarchie aktiv ist und das Skript aktiviert ist. Dies sollte nur auf false festgelegt werden, wenn Sie beabsichtigen, die Darstellung und das Verschwinden des Hinweises per Code manuell zu steuern.
AnimationState Der Name des Animationszustands, der wiedergegeben werden soll, wenn der Hinweis aktiv ist. Dies muss festgelegt werden, bevor die StartHintLoop()-Funktion aufgerufen wird (während OnEnable, wenn AutoActivate aktiviert ist).
Steuern von InteractionHint per Skript
- StartHintLoop Diese Funktion startet die Ein-/Ausblende-Schleife, die andernfalls OnEnable startet, wenn das AutoActivate-Flag auf true festgelegt ist.
- StopHintLoop Diese Funktion ruft den Ausblendungsanimationszustand auf, wenn er derzeit nicht wiedergegeben wird, deaktiviert dann die Ein-/Ausblende-Schleife und legt das Handgerät inaktiv in der Hierarchie fest.
- AnimationState Diese Zeichenfolge bestimmt, welcher Animationszustand während der Schleife wiedergegeben wird. Sie können diese Zeichenfolge ändern, um zu ändern, welcher Zustand wiedergegeben wird, aber Sie müssen dies nach dem Aufruf von StopHintLoop tun, und Sie müssen StartHintLoop erneut aufrufen, nachdem Sie den Zustand geändert haben.
- CustomShouldHideVisuals Sie können dies mit Ihrer eigenen Funktion festlegen, die true zurückgeben sollte, wenn Sie die Handvisuals ausblenden möchten (beachten Sie minMaxTimer, insbesondere den max-Parameter).
Überlegungen zu benutzerdefinierten Animationen
Ausblendungen sind standardmäßig auf 0,5 Sekunden festgelegt. Daher sollten benutzerdefinierte Animationen, die für die Verwendung mit dem Rig erstellt wurden, mindestens 1,5 Sekunden betragen, damit alle aussagekräftigen Informationen übermittelt werden können.
Die bereitgestellten Standard-Ein- und Ausblendzustände, Fade_In und Fade_Out können durch Ändern des Zeitstempels des zweiten Keyframes angepasst werden, um die Länge der Einblendung festzulegen.
Der Animator und das Skript wurden so eingerichtet, dass die Einrichtung so einfach wie möglich sein sollte. Um neue Animationszustände hinzuzufügen, importieren Sie einfach Ihren Fbx, stellen Sie sicher, dass der Animationsname mit einem eindeutigen Namen festgelegt ist, und ziehen Sie diese Animation in den Animationsator.
MoveToTarget
Das MoveToTarget.cs-Skript bietet Funktionen zum Verschieben des Handhinweises von einer Verfolgungsposition in eine Zielposition im Laufe der Zeit.
Einrichten von MoveToTarget
Die bereitgestellten Prefabs "MovingHandCoachRoot_L.prefab" und "MovingHandCoachRoot_R.prefab" enthalten ein MoveToTarget in ihren Hierarchien. Wenn Sie dieses Skript für Ihr eigenes Setup verwenden möchten, müssen Sie es im Stamm-Gameobjekt platzieren, das den Animator für Ihr Rig enthält.
Inspektoreigenschaften
- TrackingObject Legen Sie dies mit dem Objekt fest, dem das Rig folgen soll, bevor die Bewegung gestartet wird. Es wird empfohlen, ein leeres GameObject zu erstellen und es an eine bestimmte Position zu verschieben, damit Sie die Nachverfolgung besser ermitteln können.
- TargetObject Legen Sie dies mit dem Objekt fest, zu dem das Rig während seiner Bewegung verschoben werden soll. Es wird empfohlen, ein leeres GameObject zu erstellen und es an eine bestimmte Position zu verschieben, damit Sie die Nachverfolgung besser ermitteln können.
- RootObject Legen Sie dies auf ein gemeinsames übergeordnetes Element zwischen Nachverfolgungs- und Zielobjekt fest, damit die relativen Positionen richtig berechnet werden können. Das enthaltene Prefab enthält sowohl Nachverfolgungs- als auch Zielobjekte in seiner Hierarchie, aber Sie können das Zielobjekt als gameObject außerhalb des Prefabs festlegen und das Stammobjekt in ein freigegebenes übergeordnetes Objekt ändern.
- Dauer Die Zeitspanne, die (in Sekunden) benötigt werden sollte, um von TrackingObject zu TargetObject zu wechseln in Sekunden.
- TargetOffset Ein abstimmbarer Offset, um das GameObject an die richtige Zielposition zu bringen. Dies ist nützlich, wenn Ihre Animation während der Animation einen Positionsoffset enthält.
- AnimationCurve Dies ist standardmäßig eine lineare Kurve, aber Sie können die Kurve ändern, um eine Beschleunigung beim Starten und Beenden des Bewegungspfads bereitzustellen.
Steuern von MoveToTarget per Skript
Führen Sie in Ihrem benutzerdefinierten Skript einen Aufruf von Follow() durch, während das Hand-Rig dem TrackingObject folgt, und rufen Sie dann MoveToTargetPosition() auf, wenn die Hand-Rig ihre Bewegung zum TargetObject beginnen soll.
Steuern von MoveToTarget über Animationen
Legen Sie in der Animation, die verschoben werden muss, zwei Ereignisse fest: eines mit einem Aufruf von Follow() und eines mit einem Aufruf von MoveToTargetPosition(). Follow sollte für den ersten Keyframe festgelegt werden, da dies bewirkt, dass das Handgerät Ihrem TrackingObject folgt. MoveToTargetPosition sollte für den Keyframe festgelegt werden, an dem das Rig mit dem Verschieben zum Ziel beginnen soll. Auf diese Weise wird die Skriptfunktionalität in den bereitgestellten Prefabs verwendet.
RotateAroundPoint
Das RotateAroundPoint.cs Skript bietet Funktionen zum Drehen des Handhinweises um einen Pivotpunkt im Laufe der Zeit.
Einrichten von RotateAroundPoint
Die bereitgestellten Prefabs "RotatingHandCoachRoot_L.prefab" und "RotatingHandCoachRoot_R.prefab" enthalten einen RotateAroundPoint in ihren Hierarchien. Wenn Sie dieses Skript für Ihr eigenes Setup verwenden möchten, müssen Sie es im Stamm-Gameobjekt platzieren, das den Animator für Ihr Rig enthält.
Inspektoreigenschaften
- CenteredParent Legen Sie dies mit dem übergeordneten Objekt fest, um das das Rig pivotieren soll.
- InverseParent Legen Sie dies mit dem übergeordneten Element fest, um invers zu zentriertParent zu drehen, um die Handausrichtung gleich zu halten. Im Allgemeinen ist dies das übergeordnete Objekt mit dem InteractionHint-Skript.
- PivotPosition Legen Sie dies auf einen Punkt fest, an dem der Hinweis mit der Bewegung beginnen soll.
- Dauer Die Zeit, die (in Sekunden) dauern sollte, um centeredParent zu drehen.
- AnimationCurve Dies ist standardmäßig eine lineare Kurve, aber Sie können die Kurve ändern, um eine Beschleunigung beim Starten und Beenden des Bewegungspfads bereitzustellen.
- RotationVector Wie viele Grad auf jeder Achse gedreht werden sollen.
Steuern von RotateAroundPoint per Skript
Rufen Sie in Ihrem benutzerdefinierten Skript RotateToTarget() auf, wenn das Handgerät mit der Drehung um centeredParent beginnen soll. Wenn die Position auf die ursprüngliche PivotPosition zurückgesetzt werden soll, rufen Sie ResetAndDeterminePivot() auf.
Steuern von RotateAroundPoint über Animationen
Legen Sie in der Animation, die verschoben werden muss, zwei Ereignisse fest: eines mit einem Aufruf von ResetAndDeterminePivot() und eines mit einem Aufruf von RotateToTarget(). ResetAndDeterminePivot sollte für den ersten Keyframe festgelegt werden, da dies bewirkt, dass das Hand-Rig auf die PivotPosition zurückgesetzt wird. RotateToTarget sollte für den Keyframe festgelegt werden, an dem das Rig mit der Drehung um centeredParent beginnen soll. Auf diese Weise wird die Skriptfunktionalität in den bereitgestellten Prefabs verwendet.