Skip to main content
Version : 2.1.1

Démarrage rapide : Inverse Unity Package

Ce guide décrit la configuration de base et fournit un exemple simple pour démontrer l'utilisation fondamentale du Haply Inverse Unity Package, y compris l'installation du package, la configuration d'un Haptic Rig, et la création de scripts simples pour le contrôle de la force et de la position.

Pour plus de détails et de techniques avancées, consultez les didacticiels.

Soutien à la version

  • Unity 2021.3.x LTS : pris en charge
  • Unity 2022.3.x LTS : pris en charge
  • Unity 2023.x.x (Tech Stream) : Expérimental
  • Haply Inverse SDK: 2.0.0 ou supérieur

Conditions préalables

  • Installez le SDK Haply Inverse version 2.0.0 ou supérieure.
  • S'assurer que le service Haply Inverse est opérationnel.
  • Confirmez que vos appareils Inverse3 et VerseGrip sont connectés et calibrés avant de lancer la scène.
note

Le paquet est en développement continu afin d'améliorer le support de l'Inverse3. Pour obtenir de l'aide, des commentaires ou des demandes, veuillez nous contacter.

Installation

Le package Inverse Unity est disponible via le Scoped Registry de Unity. Pour intégrer le paquetage :

  1. Ouvrez Edit > Project Settings > Package Manager. Ajoutez un nouveau Scoped Registry avec :

    • Nom : Haply Robotics
    • URL : https://unitypackages.haply.co
    • Portée(s) : co.haply

    registre scopé

  2. Accès Fenêtre > Gestionnaire de paquets, cliquez sur le bouton ajouter + et sélectionnez Ajouter un paquet par nom. Entrer co.haply.inverse et cliquez sur Ajouter.

    upm-ui-quick-add

Une fois l'installation réussie, le gestionnaire de paquets affichera le paquet Inverse.

Mise en place de la plate-forme haptique

Pour créer un Haptic Rig, naviguez vers GameObject > Haply Inverse > Haptic Rig (une main). Cette action permet d'assembler un environnement complet avec le contrôleur Inverse3 et le VerseGrip.

Votre scène comprendra désormais

  • Haptic Device Mapper: Gère l'allocation des périphériques avec le service inverse de Haply.
  • Origine haptique: Échelle et position de l'installation haptique dans la scène.
  • Contrôleur haptique: Gère la force ou la position du curseur en fonction des données des appareils Inverse3 et VerseGrip.
  • Curseur: Contient les composants Inverse3Cursor et VerseGrip Cursor pour la représentation de la scène.

haptique-rig

Pour plus de détails sur les composants du paquet, voir la page de documentation sur l'architecture globale.

En mode lecture, la sphère se déplace et tourne en synchronisation avec le curseur Inverse3 et l'orientation de VerseGrip.

inverse3-inspecteur

poignée-inspecteur

Mode de contrôle de la force

Créer un ForceControl.cs C# et l'attacher au fichier Origine haptique GameObject. Ce script vous permet d'appliquer des forces au Inverse3 à l'aide des curseurs de l'inspecteur.

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.Release();
}

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

contrôle des forces

Explication du scénario

  • forceX, Y, Z: Composants du vecteur de force réglables à l'aide de curseurs, garantissant que les forces restent dans les limites de sécurité avant d'être transmises à l'unité de commande. CursorSetForce méthode. Il est également possible d'utiliser une Vector3 pourrait être utilisé.

  • Awake(): Récupère le Inverse3 du GameObject actuel ou de son enfant.

  • OnEnable(): Enregistrer le OnDeviceStateChanged de la mise à jour haptique dans un thread séparé après l'exécution de la fonction Awake et à chaque fois que le script est activé.

  • OnDisable(): Désenregistre le callback et réinitialise la force lorsque le script est désactivé ou que l'application s'arrête.

  • OnDeviceStateChanged: Recherche le force de la fenêtre de l'inspecteur et le transmet à la fenêtre de l'inspecteur. Inverse3 en utilisant le CursorSetForce méthode.

    IMPORTANT : Le callback est déclenché par le thread haptique à une fréquence élevée, comprise entre 4 et 8 kHz. Il est essentiel de veiller à ce que tout le code de ce rappel soit hautement optimisé.

Utilisation

Avant d'entrer en mode lecture, assurez-vous que vous maintenez le curseur. L'appareil doit passer à l'état de contrôle de la force, indiqué par un voyant vert. Vous pouvez alors naviguer dans l'espace de travail de l'appareil en ajustant la force de sortie à l'aide des curseurs.

avertissement

L'ajustement des forces entraîne le déplacement de l'Inverse3. Veillez à ce que votre espace de travail soit dégagé et tenez toujours le curseur. Pour les consignes de sécurité, reportez-vous à l'article Utilisation en toute sécurité.

curseur-force

Mode de contrôle de la position

De même, créez un PositionControl.cs script C# pour contrôler la position de l'appareil et l'attacher à l'écran de l'appareil. Origine haptique Objet du jeu.

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.Release();
}

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

Assurez-vous que le script ForceControl ou tout autre script contrôlant l'appareil est désactivé.

contrôle de position

Comme dans l'exemple précédent :

  • Utiliser positionX, Y, and Z pour régler le position en utilisant les curseurs en mode lecture.

    L'option sélectionnée Range(-0.1, 0.1) correspond à peu près à la position maximale réalisable.

  • Les Awake récupère la méthode Inverse3 de la composante.
  • Les OnEnable enregistre la méthode OnDeviceStateChanged de la mise à jour haptique dans un thread séparé après l'exécution de la fonction Awake et à chaque fois que le script est activé.
  • Les OnDisable désenregistre le rappel et réinitialise la force lorsque le script est désactivé ou que l'application s'arrête.

Il existe toutefois des différences :

  • Les OnDeviceStateChanged enregistre d'abord le basePosition. Ensuite, à chaque image haptique, il prend le vecteur de position de la fenêtre de l'inspecteur, l'ajoute au vecteur de position de la fenêtre de l'inspecteur et l'ajoute au vecteur de position de l'inspecteur. basePositionet l'envoie à l'Inverse3 à l'aide de la fonction CursorSetPosition méthode.

Avant d'entrer en mode lecture, maintenez le curseur enfoncé. L'appareil doit passer à l'état de contrôle de position (indiqué par une lumière bleue). Vous pouvez alors explorer l'espace de travail de l'appareil en ajustant la sortie de position à l'aide des curseurs.

avertissement

Lorsque vous ajustez la position, l'Inverse3 se déplace. Veillez à ce que l'espace de travail soit libre de tout objet de valeur et tenez toujours le curseur. Pour plus de détails, reportez-vous à l'article Utilisation sûre.

position du curseur