Zum Hauptinhalt springen

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.
Anmerkung

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:

  1. Ö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

    durch Trennzeichen getrennte Liste

  2. 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.inverse und klicken Sie auf hinzufügen.

    Schnelles Hinzufügen in der UPM-Benutzeroberfläche

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.

Haptik-Anlage

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.

Inspektor Inverse3

Griffprüfer

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));
}
}

Kraftregelung

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 werden CursorSetForce. Es ist auch möglich, ein Feld zu verwenden Vector3 Standard.

  • Awake() : Ruft die Komponente ab Inverse3 ausgehend vom aktuellen GameObject oder einem seiner untergeordneten Objekte.

  • OnEnable() : Rückruf-Funktion speichern OnDeviceStateChanged wird im Rahmen der haptischen Aktualisierung in einem separaten Ausführungsstrang nach dem Aufruf der Methode ausgeführt Awake und 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 ab force aus dem Inspektor-Fenster und leitet es weiter an Inverse3 mithilfe der Methode CursorSetForce.

    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.

Achtung

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“.

Cursor-Stärke festlegen

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.

Positionsregelung

Ähnlich wie im vorherigen Beispiel:

  • Verwenden Sie positionX, Y, and Z um 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 Awake ruft die Komponente ab Inverse3.
  • Die Methode OnEnable Speichert die Rückruf-Funktion OnDeviceStateChanged wird im Rahmen der haptischen Aktualisierung in einem separaten Ausführungsstrang nach dem Aufruf der Methode ausgeführt Awake und jedes Mal, wenn das Skript aktiviert wird.
  • Die Methode OnDisable Deaktiviert 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 zu WorkspaceCenterLocalPosition, und sendet sie mithilfe der Methode an Inverse3 CursorSetLocalPosition.

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.

Achtung

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“.

Cursorposition festlegen