Erste Schritte mit dem Inverse Unity Package
Dieser Leitfaden stellt die Grundkonfiguration vor und enthält ein einfaches Beispiel, um die grundlegende Verwendung des „ Haply Inverse Unity Package“ zu veranschaulichen, einschließlich der Installation des Pakets, der Einrichtung eines Haptic Rigs und der Erstellung einfacher Skripte zur Kraft- und Positionssteuerung.
Umfassende Informationen und fortgeschrittene Techniken finden Sie in den Tutorials.
Versionskompatibilität
- Unity 2021.3.x LTS: Unterstützung
- Unity 2022.1.x LTS: Unterstützung
- Unity 6000.x LTS: Unterstützung
- Haply Inverse SDK : 3.1.0 oder höher
Voraussetzungen
- Installieren Sie die Haply Inverse SDK, Version 3.1.0 oder höher.
- Stellen Sie sicher, dass der „Haply -Inverse-Service“ betriebsbereit ist.
- Vergewissern Sie sich, dass Ihre Geräte „ Inverse3 “ und „VerseGrip“ verbunden und kalibriert sind, bevor Sie die Szene starten.
Das Paket wird kontinuierlich weiterentwickelt, um die Unterstützung für Inverse3 zu verbessern. Bei Fragen, Anmerkungen oder Wünschen wenden Sie sich bitte an uns.
Einrichtung
Das Paket „Inverse Unity“ ist über die Scoped Registry von Unity verfügbar. So integrieren Sie das Paket:
-
Öffnen Sie „Bearbeiten“ > „Projekteinstellungen“ > „Paketmanager“. Fügen Sie eine neue bereichsbezogene Registry mit folgenden Angaben hinzu:
- Name:
Haply Robotics - URL:
https://unitypackages.haply.co - Geltungsbereich(e):
co.haply

- Name:
-
Hier geht es zu Fenster > Paketmanager, klicken Sie auf die Schaltfläche hinzufügen +, und wählen Sie dann Paket nach Name hinzufügen. Geben Sie ein
co.haply.inverseund klicken Sie auf hinzufügen.
Nach erfolgreicher Installation zeigt der Paketmanager das Paket „Inverse“ an.
Aufbau des Haptic Rig
Um ein Haptic Rig zu erstellen, wählen Sie „GameObject“ > „ Haply Inverse“ > „Haptic Rig (one hand)“. Dadurch wird eine komplette Umgebung mit dem „ Inverse3 “-Controller und dem „VerseGrip“ zusammengestellt.
Ihre Szene umfasst nun Folgendes:
- Haptic Device Mapper: Verwaltet die Zuordnung von Peripheriegeräten mithilfe des „Haply Inverse Service“.
- Haptic Origin: Skaliert die haptische Konfiguration und positioniert sie in der Szene.
- Haptischer Controller: Steuert die Kraft oder Position des Cursors anhand der Daten der Peripheriegeräte Inverse3 und VerseGrip.
- Cursor: Enthält die Komponenten „Inverse3 “, „Cursor“ und „VerseGrip Cursor“ für die Darstellung in der Szene.

Weitere Informationen zu den Komponenten des Pakets finden Sie auf der Dokumentationsseite zur Gesamtarchitektur.
Im Wiedergabemodus bewegt sich die Kugel synchron mit dem Cursor und dreht sich Inverse3 und der Ausrichtung des VerseGrip.


Kraftregelungsmodus
Erstellen Sie ein Skript ForceControl.cs C# und fügen Sie es dem GameObject hinzu Haptischer Ursprung.
Mit diesem Skript können Sie Kräfte auf das Gerät ausüben Inverse3 mithilfe der Schieberegler im Inspektor.
using Haply.Inverse;
using UnityEngine;
public class ForceControl : MonoBehaviour
{
[Range(-2, 2)]
public float forceX;
[Range(-2, 2)]
public float forceY;
[Range(-2, 2)]
public float forceZ;
private Inverse3 _inverse3;
private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}
protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.Release();
}
private void OnDeviceStateChanged(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
inverse3.SetCursorLocalForce(new Vector3(forceX, forceY, forceZ));
}
}
Erläuterung des Skripts
-
forceX, Y, Z: Kraftvektorkomponenten, die mithilfe von Schiebereglern eingestellt werden können und gewährleisten, dass die Kräfte innerhalb der Sicherheitsgrenzen bleiben, bevor sie an die Methode weitergeleitet werdenCursorSetForce. Es ist auch möglich, ein Feld zu verwendenVector3Standard. -
Awake(): Ruft die Komponente ab Inverse3 ausgehend vom aktuellen GameObject oder einem seiner untergeordneten Objekte. -
OnEnable(): Rückruf-Funktion speichernOnDeviceStateChangedwird im Rahmen der haptischen Aktualisierung in einem separaten Ausführungsstrang nach dem Aufruf der Methode ausgeführtAwakeund jedes Mal, wenn das Skript aktiviert wird. -
OnDisable(): Hebt die Callback-Funktion auf und setzt die Kraft zurück, wenn das Skript deaktiviert wird oder die Anwendung beendet wird. -
OnDeviceStateChanged: Ruft den Vektor abforceaus dem Inspektor-Fenster und leitet es weiter an Inverse3 mithilfe der MethodeCursorSetForce.WICHTIG: Die Callback-Funktion wird durch den haptischen Thread mit einer hohen Frequenz zwischen 1 kHz und 8 kHz ausgelöst. Es ist unbedingt darauf zu achten, dass der gesamte Code dieser Callback-Funktion in höchstem Maße optimiert ist.
Nutzung
Bevor Sie in den Wiedergabemodus wechseln, stellen Sie sicher, dass Sie den Schieberegler gedrückt halten. Das Gerät sollte in den „Force Control“-Modus wechseln, was durch eine grüne LED angezeigt wird. Anschließend können Sie den Arbeitsbereich des Geräts erkunden, indem Sie die Ausgangsleistung mithilfe der Schieberegler anpassen.
Durch die Einstellung der Kräfte wird „ Inverse3 “ in Bewegung versetzt. Stellen Sie sicher, dass Ihr Arbeitsbereich frei von Hindernissen ist, und halten Sie den Schieberegler stets fest. Sicherheitshinweise finden Sie im Artikel „Sichere Verwendung“.

Verfahren zur Positionssteuerung
Erstellen Sie auf die gleiche Weise ein Skript PositionControl.cs C# zur Steuerung der Position des Geräts und zum Anbringen an das GameObject Haptischer Ursprung.
using Haply.Inverse;
using UnityEngine;
public class PositionControl : MonoBehaviour
{
[Range(-0.1f, 0.1f)]
public float positionX;
[Range(-0.1f, 0.1f)]
public float positionY;
[Range(-0.1f, 0.1f)]
public float positionZ;
private Inverse3 _inverse3;
private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}
protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.Release();
}
private void OnDeviceStateChanged(object sender, Inverse3EventArgs args)
{
var inverse3 = args.DeviceController;
inverse3.SetCursorLocalPosition(inverse3.WorkspaceCenterLocalPosition + new Vector3(positionX, positionY, positionZ));
}
}
Stellen Sie sicher, dass das Skript „ForceControl“ und alle anderen Skripte, die das Gerät steuern, deaktiviert sind.
Ähnlich wie im vorherigen Beispiel:
- Verwenden Sie
positionX, Y, and Zum die Position mithilfe der Schieberegler im Wiedergabemodus.Der ausgewählte Strand
Range(-0.1, 0.1)entsprechen in etwa der maximal erreichbaren Position. - Die Methode
Awakeruft die Komponente ab Inverse3. - Die Methode
OnEnableSpeichert die Rückruf-FunktionOnDeviceStateChangedwird im Rahmen der haptischen Aktualisierung in einem separaten Ausführungsstrang nach dem Aufruf der Methode ausgeführtAwakeund jedes Mal, wenn das Skript aktiviert wird. - Die Methode
OnDisableDeaktiviert die Erinnerungsfunktion und setzt die Kraft zurück, wenn das Skript deaktiviert wird oder die Anwendung beendet wird.
Es gibt jedoch Unterschiede:
- Die Rückruf-Funktion
OnDeviceStateChanged, bei jedem haptischen Frame den Positionsvektor aus dem Inspektor-Fenster abrufen und ihn zuWorkspaceCenterLocalPosition, und sendet sie mithilfe der Methode an Inverse3CursorSetLocalPosition.
Bevor Sie in den Wiedergabemodus wechseln, halten Sie den Schieberegler in der Nähe der Mittelposition. Das Gerät sollte in den Positionssteuerungsmodus wechseln (erkennbar an einer blauen LED). Anschließend können Sie den Arbeitsbereich des Geräts erkunden, indem Sie die Ausgabeposition mithilfe der Schieberegler anpassen.
Inverse3 setzt sich bei der Positionseinstellung in Bewegung. Stellen Sie sicher, dass der Arbeitsbereich frei von Hindernissen ist und keine Wertgegenstände enthält, und halten Sie den Schieberegler stets fest. Weitere Informationen finden Sie im Artikel „Sichere Verwendung“.
