Zum Hauptinhalt springen

Erste Schritte mit dem „Inverse Unity Package“

In diesem Leitfaden werden anhand einer grundlegenden Einrichtung und einfacher Beispiele die grundlegenden Funktionen des „Inverse Unity“-Pakets vonHaply erläutert. Behandelt werden die Installation des Pakets, die Einrichtung eines haptischen Rigs sowie die Erstellung einfacher Skripte für die Kraft- und Positionssteuerung.

Ausführliche Erläuterungen und fortgeschrittene Methoden finden Sie imTutorial.

Versionsunterstützung​

  • Unity 2021.3.x LTS: Unterstützt
  • Unity 2022.1.x LTS: Unterstützt
  • Unity 6000.x LTS: Unterstützt
  • Haply Inverse SDK: 3.1.0 oder höher

Voraussetzungen​

  • Haply Inverse SDK Bitte installieren Sie Version 3.1.0 oder höher.
  • Haply Bitte stellen Sie sicher, dass „Inverse Service“ läuft.
  • Vergewissern Sie sich vor dem Starten der Szene, dass das „Inverse3 “ und das VerseGrip-Gerät miteinander verbunden und kalibriert sind.
Anmerkung

Dieses Paket wird kontinuierlich weiterentwickelt, um die Unterstützung fürInverse3 zu verbessern. Bei Fragen, Feedback oder Wünschenwenden Sie sich bitte an uns.

Installation​

Das „Inverse Unity“-Paket ist in der Scoped Registry von Unity verfügbar. Befolgen Sie die folgenden Schritte, um das Paket zu integrieren.

  1. Öffnen Sie „Bearbeiten > Projekteinstellungen > Paketmanager “. Fügen Sie eine neue „Scoped Registry“ mit den folgenden Angaben hinzu.

    • Name: Haply Robotics
    • URL: https://unitypackages.haply.co
    • Geltungsbereich(e): co.haply

    scoped-registry

  2. Fenster > Paketmanager öffnen undhinzufügen + Klicken Sie auf die Schaltfläche, um,Paket nach Name hinzufügen Wählen Sie diese Option aus. co.haply.inverse eingeben undhinzufügen Klicken Sie darauf.

    upm-ui-quick-add

Sobald die Installation abgeschlossen ist, wird das Inverse-Paket im Paketmanager angezeigt.

Einrichtung des haptischen Rigs​

Um ein haptisches Rig zu erstellen, navigieren Sie zu„GameObject“ > „ Haply Inverse“ > „Haptic Rig (one hand) “. Dadurch wird eine vollständige Umgebung mit dem „Inverse3 “-Controller und dem „VerseGrip“ zusammengestellt.

Die Szene wird nun Folgendes enthalten:

  • Verwenden Sie den „Haptic Device Mapper: Haply Inverse Service“, um die Zuordnung der Geräte zu verwalten.
  • Haptic Origin: Hier können Sie die haptischen Einstellungen innerhalb der Szene vergrößern, verkleinern und positionieren.
  • Haptischer Controller: Inverse3 Steuert die Kraft oder Position des Cursors auf der Grundlage der Gerätedaten von VerseGrip.
  • Cursor: Enthält zur Darstellung der Szene die Komponenten„Inverse3 -Cursor “ und „VerseGrip-Cursor “.

Haptik-Rig

Weitere Informationen zu den Komponenten des Pakets finden Sie aufder Dokumentationsseite „Global Architecture“.

Im Spielmodus bewegt sich die Kugel Inverse3 bewegt sich und dreht sich synchron zur Ausrichtung des Cursors und von VerseGrip.

inverse3-Inspektor

Griffinspektor

Kraftregelungsmodus​

ForceControl.cs Erstellen Sie ein C#-Skript undHaptischer Ursprung An ein GameObject anhängen. Mit diesem Skript können Sie über den Schieberegler im Inspektor Inverse3 Man kann Kraft auf das Gerät ausüben.

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

Zwangskontrolle

Beschreibung des Skripts​

  • forceX, Y, Z: Dies sind die Komponenten des Kraftvektors, die über den Schieberegler eingestellt werden können. Die Kraft beträgtCursorSetForce Bevor sie an die Methode übergeben werden, werden sie so begrenzt, dass sie innerhalb eines sicheren Bereichs bleiben. Oder die Standard- Vector3 Sie können auch Felder verwenden.

  • Awake(): Vom aktuellen GameObject oder dessen untergeordneten Objekten Inverse3 Die Komponente wird abgerufen.

  • OnEnable(): Awake Nach dem Aufruf der Methode sowie bei jeder Aktivierung des Skripts werden die haptischen Aktualisierungen aus OnDeviceStateChanged Der Callback wird in einem separaten Thread registriert.

  • OnDisable(): Wenn das Skript deaktiviert wird oder die Anwendung beendet wird, wird die Registrierung des Callbacks aufgehoben und der Status zurückgesetzt.

  • OnDeviceStateChanged: Aus dem Inspektor-Fenster force Den Vektor abrufen und,CursorSetForce Mithilfe der Methode Inverse3 weiterleiten.

    Wichtig: Dieser Callback wird mit einer hohen Frequenz von 1 kHz bis 8 kHz vom Haptik-Thread aufgerufen. Es ist äußerst wichtig, den gesamten Code in diesem Callback gründlich zu optimieren.

Gebrauchsanweisung​

Vergewissern Sie sich vor dem Aufrufen des Spielmodus, dass Sie den Cursor gedrückt halten. Das Gerät wechselt in den „Force Control“-Modus, der durch eine grüne Leuchte angezeigt wird. Anschließend können Sie die Kraftabgabe mithilfe des Schiebereglers einstellen und das Gerät innerhalb des Arbeitsbereichs steuern.

Warnung

Wenn Sie die Kraft einstellen, bewegt sich „ Inverse3 “. Vergewissern Sie sich, dass sich keine Hindernisse im Arbeitsbereich befinden, und halten Sie den Cursor unbedingt fest. Informationen zu den Sicherheitsrichtlinien finden Sieim Artikel zur sicheren Verwendung.

cursor-set-force

Positionsregelungsmodus​

Ebenso dient dies zur Steuerung der Position des Geräts PositionControl.cs Erstellen Sie ein C#-Skript undHaptischer Ursprung An das GameObject anhängen.

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 zur Steuerung des Geräts deaktiviert sind.

Positionssteuerung

Wie im vorherigen Beispiel:

  • Im Wiedergabemodus mit dem Schieberegler Position Um dies anzupassen,positionX, Y, and Z wird verwendet.

    Ausgewählt Range(-0.1, 0.1) entspricht in etwa der maximal erreichbaren Position.

  • Awake Die Methode ist Inverse3 Die Komponente wird abgerufen.
  • OnEnable Die Methode ist,Awake Nach dem Aufruf einer Methode sowie bei jeder Aktivierung des Skripts erfolgt durch die taktile Aktualisierung OnDeviceStateChanged Der Callback wird in einem separaten Thread registriert.
  • OnDisable Die Methode hebt die Registrierung des Callbacks auf und setzt die Energie zurück, wenn das Skript deaktiviert wird oder die Anwendung beendet wird.

Es gibt jedoch folgende Unterschiede:

  • OnDeviceStateChanged Der Callback ruft für jeden taktilen Frame den Positionsvektor aus dem Inspektor-Fenster ab und WorkspaceCenterLocalPosition zusätzlich dazu, CursorSetLocalPosition Senden Sie die Daten mithilfe der Methode an Inverse3 .

Bitte halten Sie den Cursor in der Nähe der Mittelposition, bevor Sie in den Wiedergabemodus wechseln. Das Gerät sollte in den Positionssteuerungsmodus wechseln (erkennbar an der blauen Leuchte). Anschließend können Sie die Positionsausgabe mit dem Schieberegler anpassen und den Arbeitsbereich des Geräts überprüfen.

Warnung

Wenn Sie die Position anpassen, bewegt sich „ Inverse3 “. Vergewissern Sie sich, dass sich keine Wertsachen in Ihrem Arbeitsbereich befinden, und halten Sie den Cursor unbedingt fest. Weitere Informationen finden Sie imArtikel zur sicheren Nutzung.

Einstellung der Cursorposition