Erste Schritte mit dem Inverse Unity Package
Dieser Leitfaden beschreibt die grundlegende Einrichtung und veranschaulicht anhand eines einfachen Beispiels die Grundfunktionen des „ Haply -Inverse-Unity-Pakets“: die Installation des Pakets, die Einrichtung eines Haptic-Rigs sowie das Erstellen einfacher Skripte für die Kraft- und Positionssteuerung.
Ausführliche Informationen und fortgeschrittene Techniken finden Sie in den Tutorials.
Versionsunterstützung
- Unity 2021.3.x LTS: wird unterstützt
- Unity 2022.1.x LTS: wird unterstützt
- Unity 6000.x LTS: wird unterstützt
- Haply Inverse SDK: 3.1.0 oder neuer
Voraussetzungen
- Installieren Sie das Haply Inverse SDK in Version 3.1.0 oder neuer.
- Stellen Sie sicher, dass der „Haply -Inverse-Service“ betriebsbereit ist.
- Vergewissern Sie sich, dass Ihre „ Inverse3 “- und „VerseGrip“-Geräte verbunden und kalibriert sind, bevor Sie die Szene starten.
Das Paket wird kontinuierlich weiterentwickelt, um die Unterstützung für „ Inverse3 “ zu verbessern. Für Support, Feedback oder Anfragen kontaktieren Sie uns bitte.
Einrichtung
Das Inverse Unity-Paket ist über die Scoped Registry von Unity verfügbar. Gehen Sie zur Integration des Pakets wie folgt vor:
-
Öffnen Sie „Bearbeiten“ > „Projekteinstellungen“ > „Paketmanager“. Fügen Sie eine neue bereichsbezogene Registry mit den folgenden Angaben hinzu:
- Name:
Haply Robotics - URL:
https://unitypackages.haply.co - Geltungsbereich(e):
co.haply

- Name:
-
Rufen Sie an Fenster > Paketmanager Klicken Sie auf die Schaltfläche hinzufügen + und wählen Sie Paket nach Name hinzufügen. Geben Sie
co.haply.inverseGeben Sie ein und klicken Sie auf hinzufügen.
Nach erfolgreicher Installation zeigt der Paketmanager das Inverse-Paket an.
Einrichtung des Haptic Rig
Um ein Haptic Rig zu erstellen, navigieren Sie zu „GameObject“ > „ Haply “ > „Inverse“ > „Haptic Rig (one hand)“. Dabei wird eine vollständige Umgebung mit dem „ Inverse3 “-Controller und dem „VerseGrip“ zusammengestellt.
Ihre Szene enthält anschließend:
- Haptic Device Mapper: Verwaltet die Gerätezuordnung über den „Haply “-Inverse-Service.
- Haptic Origin: Skaliert und positioniert das Haptik-Setup innerhalb der Szene.
- Haptic Controller: Verwaltet die Cursorkraft bzw. die Cursorposition auf Basis der Gerätedaten von 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 Seite „Globale Architektur“.
Im Spielmodus bewegt und dreht sich die Kugel synchron mit dem Cursor des Inverse3 und der Ausrichtung des VerseGrip.


Kraftregelungsmodus
Erstellen Sie ein C#-Skript ForceControl.cs und fügen Sie es dem GameObject hinzu Haptischer Ursprung an.
Mit diesem Skript können Sie über Schieberegler im Inspector Kräfte auf das Gerät ausüben Inverse3 anzuwenden.
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: Über Schieberegler anpassbare Komponenten des Kraftvektors; sie stellen sicher, dass die Kräfte vor der Übergabe an die MethodeCursorSetForceinnerhalb sicherer Grenzen bleiben. Alternativ könnte ein StandardfeldVector3verwendet werden. -
Awake(): Ruft die Komponente auf Inverse3 hängt vom aktuellen GameObject oder einem seiner untergeordneten Objekte ab. -
OnEnable(): Registriert den CallbackOnDeviceStateChangedfür das haptische Update in einem separaten Thread, nachdem die MethodeAwakeaufgerufen wurde, und jedes Mal, wenn das Skript aktiviert wird. -
OnDisable(): Hebt die Registrierung des Callbacks auf und setzt die Kraft zurück, wenn das Skript deaktiviert oder die Anwendung beendet wird. -
OnDeviceStateChanged: Ruft den Vektor aufforceaus dem Inspector-Fenster und leitet ihn mithilfe der MethodeCursorSetForcean das Inverse3 weiter.WICHTIG: Der Callback wird vom Haptik-Thread mit hoher Frequenz ausgelöst, im Bereich von 1 kHz bis 8 kHz. Es ist entscheidend, dass der gesamte Code in diesem Callback stark optimiert ist.
Verwendung
Stellen Sie vor dem Wechsel in den Play-Modus sicher, dass Sie den Cursor gedrückt halten. Das Gerät sollte in den „Force Control “-Modus wechseln, erkennbar an einer grünen Leuchte. Anschließend können Sie den Arbeitsbereich des Geräts durchlaufen, indem Sie die Kraftabgabe über die Schieberegler anpassen.
Durch die Anpassung der Kräfte bewegt sich Inverse3 . Stellen Sie sicher, dass Ihr Arbeitsbereich frei ist, und halten Sie den Cursor stets fest. Sicherheitshinweise finden Sie im Artikel zur sicheren Verwendung.

Positionssteuerungsmodus
Erstellen Sie ebenfalls ein C#-Skript PositionControl.cs um die Position des Geräts zu steuern, und hängen Sie es an das GameObject an Haptischer Ursprung an.
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 ForceControl-Skript oder andere Skripte, die das Gerät steuern, deaktiviert sind.
Ähnlich wie im vorherigen Beispiel:
- Verwenden Sie
positionX, Y, and Z, um die Position während des Wiedergabemodus über Schieberegler anzupassen.Der ausgewählte Bereich
Range(-0.1, 0.1)entspricht in etwa der maximal erreichbaren Position. - Die Methode
Awakeruft die Komponente auf Inverse3 ab. - Die Methode
OnEnableregistriert den CallbackOnDeviceStateChangedaus dem haptischen Update in einem separaten Thread nach dem Aufruf der MethodeAwakeund jedes Mal, wenn das Skript aktiviert wird. - Die Methode
OnDisableHebt die Registrierung des Callbacks auf und setzt die Kraft zurück, wenn das Skript deaktiviert oder die Anwendung beendet wird.
Es gibt jedoch Unterschiede:
- Der Callback
OnDeviceStateChangednimmt während jedes haptischen Frames den Positionsvektor aus dem Inspektor-Fenster, addiert ihn zuWorkspaceCenterLocalPositionund sendet ihn mithilfe der MethodeCursorSetLocalPositionein Inverse3.
Halten Sie den Cursor vor dem Wechsel in den Wiedergabemodus nahe an der Mittelposition. Das Gerät sollte in den Positionssteuerungsmodus wechseln (angezeigt durch ein blaues Licht). Anschließend können Sie den Arbeitsbereich des Geräts erkunden, indem Sie die Positionsausgabe mit den Schiebereglern anpassen.
Beim Anpassen der Position bewegt sich Inverse3. Stellen Sie sicher, dass der Arbeitsbereich frei von Wertgegenständen ist, und halten Sie den Cursor stets fest. Weitere Details finden Sie im Artikel zur sicheren Verwendung.
