Erste Schritte mit dem Inverse Unity-Paket
Dieser Leitfaden führt Sie durch die Grundeinstellungen und enthält einfache Beispiele, die die grundlegende Verwendung des „ Haply Inverse Unity“-Pakets veranschaulichen. Dazu gehören die Installation des Pakets, die Einrichtung eines Haptik-Setups sowie das Erstellen einfacher Skripte zur Kraft- und Positionssteuerung.
Weitere Informationen und fortgeschrittene Techniken finden Sie im Tutorial.
Versionsunterstützung
- 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
- Haply Inverse SDK Installieren Sie Version 3.1.0 oder höher.
- Haply Bitte überprüfen Sie, ob der Inverse Service ordnungsgemäß funktioniert.
- Vergewissern Sie sich vor dem Ausführen der Szene, dass die Geräte „ Inverse3 “ und „VerseGrip“ angeschlossen und kalibriert sind.
Dieses Paket wird kontinuierlich weiterentwickelt, um die Unterstützung für „ Inverse3 “ zu verbessern. Wenn Sie Hilfe benötigen, Feedback geben möchten oder Wünsche haben, nutzen Sie bitte die Kontaktfunktion.
Installation
Das „Inverse Unity“-Paketwird über die Scoped Registryvon Unity bereitgestellt. Befolgen Sie die folgenden Schritte, um das Paket zu integrieren:
-
Öffnen Sie das Menü „Bearbeiten > Projekteinstellungen > Paketmanager “. Fügen Sie eine neue „Scoped Registry“ hinzu und legen Sie folgende Werte fest:
- Name:
Haply Robotics - URL:
https://unitypackages.haply.co - Geltungsbereich(e) (Scope(s)):
co.haply

- Name:
-
Fenster > Paketmanager Im Menü hinzufügen + Klicken Sie auf die Schaltfläche und Paket nach Name hinzufügenWählen Sie diese Option aus.
co.haply.inverseeingeben und hinzufügenKlicken Sie auf .
Sobald die Installation abgeschlossen ist, wird das Inverse-Paket im Paketmanager angezeigt.
Einstellungen für die Haptic League
Um ein Haptic Rig zu erstellen, wählen Sie im Menü „GameObject“ > „ Haply Inverse“ > „Haptic Rig (one hand) “. Dadurch wird eine vollständige Umgebung erstellt, die den „ Inverse3 “-Controller sowie die „VerseGrip“-Komponente enthält.
Die Szene enthält nun folgende Elemente:
- Haptic Device Mapper: Haply Verwaltet die Gerätezuordnung auf Basis des „Inverse Service“-Prinzips.
- Haptic Origin: Passt Größe und Position der haptischen Einstellungen innerhalb der Szene an.
- Haptischer Controller: Inverse3 Steuert die Kraft oder Position des Cursors auf der Grundlage der Daten des VerseGrip- Geräts.
- Cursor: Enthält die Komponenten „Inverse3 -Cursor“ und „VerseGrip-Cursor“ zur Darstellung von Szenen.

Weitere Informationen zu den Komponenten des Pakets finden Sie auf der Dokumentationsseite zur globalen Architektur.
Im Spielmodus bewegt sich die Kugel Inverse3 bewegt sich synchron mit der Richtung des Cursors und des VerseGrips und dreht sich entsprechend.


Leistungsregelungsmodus
ForceControl.cs Ein C#-Skript erstellen und dieses Haptischer Ursprung Mit einem GameObject verknüpfen.
Mit diesem Skript können Sie mithilfe des Schiebereglers im Inspektor Inverse3 Sie können das Gerät mit Strom versorgen.
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));
}
}
Beschreibung des Skripts
-
forceX, Y, Z: Dies ist eine über einen Schieberegler einstellbare Komponente des Kraftvektors. Die KraftCursorSetForceStellen Sie sicher, dass die Werte innerhalb der Sicherheitsgrenzen bleiben, bevor sie an die Methode übergeben werden. Oder StandardVector3Sie können auch das Feld verwenden. -
Awake(): Derzeit im GameObject oder einem seiner untergeordneten Objekte Inverse3 Die Komponente wird geladen. -
OnEnable():AwakeNach dem Aufruf der Methode sowie bei jeder Aktivierung des Skripts erfolgt die Aktualisierung der haptischen Rückmeldung in einem separaten Thread.OnDeviceStateChangedRegistriert einen Callback. -
OnDisable(): Wenn das Skript deaktiviert oder die Anwendung beendet wird, wird die Callback-Registrierung aufgehoben und „Power“ zurückgesetzt. -
OnDeviceStateChanged: Im Inspektor-FensterforceDen Vektor abrufenCursorSetForceMithilfe der Methode Inverse3weiterleiten.Wichtig: Dieser Callback wird vom Haptik-Thread mit hohen Frequenzen zwischen 1 kHz und 8 kHz aufgerufen. Es ist äußerst wichtig, sicherzustellen, dass der gesamte Code innerhalb dieses Callbacks hochgradig optimiert ist.
Anleitung
Vergewissern Sie sich vor dem Aufrufen des Spielmodus, dass Sie den Cursor festhalten. Das Gerät muss in den „Force Control“-Modus wechseln, der durch ein grünes Licht angezeigt wird. Anschließend können Sie den Arbeitsbereich des Geräts erkunden und dabei die Kraftabgabe mithilfe des Schiebereglers anpassen.
Wenn Sie die Kraft einstellen, kommt es zu einer Bewegung in Richtung „ Inverse3 “. Vergewissern Sie sich, dass der Arbeitsbereich frei ist, und halten Sie den Cursor stets fest. Sicherheitshinweise finden Sie im Dokument „Sichere Verwendung“.

Positionsregelungsmodus
Ebenso die Position des Geräts steuern PositionControl.cs Ein C#-Skript erstellen und dieses Haptischer Ursprung Mit dem GameObject verknüpfen.
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 sowie alle anderen Skripte, die das Gerät steuern, deaktiviert sind.
Ähnlich wie im vorherigen Beispiel:
positionX, Y, and Zim Spielmodus mithilfe eines Schiebereglers StandortPassen Sie dies bitte an.Ausgewählt
Range(-0.1, 0.1)Dies entspricht in etwa der maximal erreichbaren Position.AwakeDie Methode ist Inverse3 Die Komponente wird geladen.OnEnableDie Methode istAwakeNach dem Aufruf der Methode und bei jeder Aktivierung des Skripts werden die haptischen Aktualisierungen in einem separaten ThreadOnDeviceStateChangedRegistriert einen Callback.OnDisableDie Methode hebt die Registrierung des Callbacks auf und setzt die Energie zurück, wenn das Skript deaktiviert oder die Anwendung beendet wird.
Es gibt jedoch folgende Unterschiede:
OnDeviceStateChangedDer Callback ruft bei jedem haptischen Frame den Positionsvektor aus dem Inspektor-Fenster ab undWorkspaceCenterLocalPositionund anschließend,CursorSetLocalPositionVerwenden Sie die Methode, um Daten an das Gerät „ Inverse3 “ zu übertragen.
Halten Sie den Cursor in der Nähe der Mitte, bevor Sie in den Spielmodus wechseln. Das Gerät muss in den Positionssteuerungsmodus wechseln (erkennbar an der blauen LED). Anschließend können Sie die Positionsausgabe mit dem Schieberegler anpassen, um den Arbeitsbereich des Geräts zu erkunden.
Wenn Sie die Position anpassen, bewegt sich das Gerät „ Inverse3 “. Vergewissern Sie sich, dass sich keine Wertsachen im Arbeitsbereich befinden, und halten Sie den Cursor stets fest. Weitere Informationen finden Sie in der Sicherheitsanleitung.
