Zum Hauptinhalt springen
Version: 2.0.0

Schnellstart: Inverse Unity-Paket

Dieser Leitfaden beschreibt die grundlegende Einrichtung und bietet ein einfaches Beispiel zur Demonstration der grundlegenden Verwendung des Haply Inverse Unity Package, einschließlich der Installation des Pakets, der Einrichtung eines Haptic Rig und der Erstellung einfacher Skripte zur Kraft- und Positionssteuerung.

Umfassende Details und fortgeschrittene Techniken finden Sie in den Tutorials.

Version Unterstützung

  • Unity 2021.3.x LTS: Unterstützt
  • Unity 2022.3.x LTS: Unterstützt
  • Unity 2023.x.x (Tech Stream): Experimentell
  • Haply Inverse SDK: 2.0.0 oder höher

Voraussetzungen

  • Installieren Sie die Haply Inverse SDK Version 2.0.0 oder höher.
  • Stellen Sie sicher, dass der Haply Inverse Service betriebsbereit ist.
  • Stellen Sie sicher, dass Ihre Inverse3 und VerseGrip-Geräte angeschlossen und kalibriert sind, bevor Sie die Szene starten.
Hinweis

Das Paket wird ständig weiterentwickelt, um die Unterstützung für Inverse3 zu verbessern. Für Unterstützung, Feedback oder Anfragen kontaktieren Sie uns bitte.

Einrichtung

Das Inverse Unity-Paket ist über die Scoped Registry von Unity verfügbar. Um das Paket zu integrieren:

  1. Öffnen Sie Bearbeiten > Projekteinstellungen > Paketmanager. Fügen Sie eine neue Scoped Registry mit hinzu:

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

    scoped-registry

  2. Zugang Fenster > Paketmanagerklicken Sie auf die hinzufügen + Taste und wählen Sie Paket nach Name hinzufügen. Eingabe co.haply.inverse und klicken Sie hinzufügen.

    upm-ui-quick-add

Nach erfolgreicher Installation zeigt der Paketmanager das Paket Inverse an.

Einrichten des Haptik-Rigs

Um ein Haptic Rig zu erstellen, navigieren Sie zu GameObject > Haply Inverse > Haptic Rig (eine Hand). Bei dieser Aktion wird eine komplette Umgebung mit dem Inverse3 Controller und dem VerseGrip erstellt.

Ihre Szene wird nun auch die folgenden Elemente enthalten:

  • Haptic Device Mapper: Verwaltet die Gerätezuordnung mit dem Haply Inverse Service.
  • Haptischer Ursprung: Skaliert und positioniert den haptischen Aufbau innerhalb der Szene.
  • Haptische Steuerung: Verwaltet die Cursorkraft oder -position basierend auf Inverse3 und VerseGrip-Gerätedaten.
  • Cursor: Enthält die Komponenten Inverse3Cursor und VerseGrip Cursor für die Szenendarstellung.

Haptik-Rig

Weitere Einzelheiten zu den Paketkomponenten finden Sie auf der Dokumentationsseite zur globalen Architektur.

Im Wiedergabemodus bewegt und dreht sich die Kugel synchron mit dem Inverse3 Ausrichtung des Cursors und des VerseGrips.

inverse3-Inspektor

Griffinspektor

Force Control-Modus

Erstellen einer ForceControl.cs C#-Skript und hängen Sie es an die Haptischer Ursprung SpielObjekt. Dieses Skript ermöglicht es Ihnen, Kräfte auf das Inverse3 Gerät mit Hilfe der Schieberegler des Inspektors.

using Haply.Inverse.Unity;
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.TryResetForce();
}

private void OnDeviceStateChanged(Inverse3 inverse3)
{
inverse3.CursorSetLocalForce(forceX, forceY, forceZ);
}
}

Zwangskontrolle

Skript-Erläuterung

  • forceX, Y, Z: Einstellbare Kraftvektorkomponenten mit Schiebereglern, die sicherstellen, dass die Kräfte innerhalb sicherer Grenzen bleiben, bevor sie an den CursorSetForce Methode. Alternativ dazu kann eine Standard Vector3 Feld verwendet werden kann.

  • Awake(): Ruft die Inverse3 Komponente aus dem aktuellen GameObject oder seinem Child.

  • OnEnable(): Registrieren Sie die OnDeviceStateChanged Callback von der haptischen Aktualisierung in einem separaten Thread nach der Awake Methodenaufruf und jedes Mal, wenn das Skript aktiviert wird.

  • OnDisable(): Hebt die Registrierung des Rückrufs auf und setzt die Kraft zurück, wenn das Skript deaktiviert wird oder die Anwendung beendet wird.

  • OnDeviceStateChanged: Holt die force Vektor aus dem Inspektorfenster und leitet ihn an den Inverse3 unter Verwendung der CursorSetForce Methode.

    WICHTIG: Der Callback wird vom haptischen Thread mit einer hohen Frequenz ausgelöst, die zwischen 4kHz und 8kHz liegt. Es ist wichtig sicherzustellen, dass der gesamte Code innerhalb dieses Callbacks hoch optimiert ist.

Verwendung

Bevor Sie in den Wiedergabemodus wechseln, stellen Sie sicher, dass Sie den Cursor gedrückt halten. Das Gerät sollte in den Force Control-Status übergehen, was durch ein grünes Licht angezeigt wird. Sie können dann im Arbeitsbereich des Geräts navigieren, indem Sie die Kraftausgabe mit den Schiebereglern anpassen.

Warnung

Wenn Sie Kräfte einstellen, bewegt sich die Inverse3 . Achten Sie darauf, dass der Arbeitsbereich frei ist, und halten Sie den Cursor immer fest. Sicherheitsrichtlinien finden Sie im Artikel Sichere Verwendung.

cursor-set-force

Lagekontrollmodus

Erstellen Sie in ähnlicher Weise eine PositionControl.cs C#-Skript zur Steuerung der Position des Geräts und verbinden Sie es mit dem Haptischer Ursprung SpielObjekt.

using Haply.Inverse.Unity;
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 Vector3 _basePosition;

private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}

protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}

protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.TryResetForce();
}

private void OnDeviceStateChanged(Inverse3 inverse3)
{
if (_basePosition == Vector3.zero)
{
_basePosition = inverse3.LocalPosition;
}
inverse3.CursorSetLocalPosition(_basePosition + new Vector3(positionX, positionY, positionZ));
}
}

Stellen Sie sicher, dass das ForceControl-Skript oder andere Skripte, die das Gerät steuern, deaktiviert sind.

Lageregelung

Ähnlich wie im vorherigen Beispiel:

  • Nutzen Sie positionX, Y, and Z zum Einstellen der Position mit Hilfe von Schiebereglern im Wiedergabemodus.

    Die ausgewählten Range(-0.1, 0.1) entspricht in etwa der maximal erreichbaren Position.

  • Die Awake Methode ruft die Inverse3 Komponente.
  • Die OnEnable Methode registrieren die OnDeviceStateChanged Callback von der haptischen Aktualisierung in einem separaten Thread nach der Awake Methodenaufruf und jedes Mal, wenn das Skript aktiviert wird.
  • Die OnDisable Methode hebt die Registrierung des Rückrufs auf und setzt die Kraft zurück, wenn das Skript deaktiviert wird oder die Anwendung endet.

Es gibt jedoch Unterschiede:

  • Die OnDeviceStateChanged Callback zeichnet zunächst die basePosition. Dann wird bei jedem haptischen Bild der Positionsvektor aus dem Inspektionsfenster genommen und zum basePositionund sendet sie an die Inverse3 unter Verwendung der CursorSetPosition Methode.

Bevor Sie in den Wiedergabemodus wechseln, halten Sie den Cursor gedrückt. Das Gerät sollte in den Zustand der Positionssteuerung übergehen (durch ein blaues Licht angezeigt). Sie können dann den Arbeitsbereich des Geräts erkunden, indem Sie die Positionsausgabe mit den Schiebereglern anpassen.

Warnung

Wenn Sie die Position einstellen, bewegt sich die Inverse3 . Achten Sie darauf, dass der Arbeitsbereich frei von Wertgegenständen ist, und halten Sie den Cursor immer fest. Weitere Einzelheiten finden Sie im Artikel Sichere Verwendung.

cursor-set-position