Aller au contenu principal

Premiers pas avec Inverse Unity Package

Ce guide présente la configuration de base et fournit un exemple simple pour illustrer l'utilisation fondamentale de Haply Inverse Unity Package, y compris l'installation du paquet, la mise en place d'un Haptic Rig et la création de scripts simples de contrôle de la force et de la position.

Pour des détails complets et des techniques avancées, explorez les tutoriels.

Compatibilité des versions​

  • Unity 2021.3.x LTS : prise en charge
  • Unity 2022.1.x LTS : prise en charge
  • Unity 6000.x LTS : prise en charge
  • Haply Inverse SDK : 3.1.0 ou ultérieure

Prérequis​

  • Installez le Haply Inverse SDK, version 3.1.0 ou ultérieure.
  • Assurez-vous que le Haply Inverse Service est opérationnel.
  • Confirmez que vos périphériques Inverse3 et VerseGrip sont connectés et calibrés avant de lancer la scène.
remarque

Le paquet fait l'objet d'un développement continu afin d'améliorer la prise en charge de Inverse3. Pour de l'aide, des commentaires ou des demandes, veuillez nous contacter.

Installation​

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

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

    • Nom : Haply Robotics
    • URL : https://unitypackages.haply.co
    • Scope(s) : co.haply

    registre délimité

  2. Accédez à Window > Package Manager, cliquez sur le bouton add +, puis sélectionnez Add package by name. Saisissez co.haply.inverse et cliquez sur Add.

    ajout rapide dans l'interface UPM

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

Mise en place du Haptic Rig​

Pour créer un Haptic Rig, accédez à GameObject > Haply Inverse > Haptic Rig (one hand). Cette action assemble 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 Haply Inverse Service.
  • Haptic Origin : met à l'échelle et positionne la configuration haptique dans la scène.
  • Haptic Controller : gère la force ou la position du curseur à partir des données des périphériques Inverse3 et VerseGrip.
  • Cursor : contient les composants Inverse3 Cursor et VerseGrip Cursor pour la représentation dans la scène.

rig haptique

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

En mode Play, la sphère se déplacera et tournera en synchronisation avec le curseur Inverse3 et l'orientation VerseGrip.

inspecteur Inverse3

inspecteur de la poignée

Mode de contrôle de la force​

Créez un script ForceControl.cs C# et attachez-le au GameObject Haptic Origin. Ce script vous permet d'appliquer des forces au périphérique Inverse3 à l'aide de glissières dans l'inspecteur.

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

contrôle-de-force

Explication du script​

  • forceX, Y, Z : composantes du vecteur de force réglables à l'aide de glissières, garantissant que les forces restent dans les limites sécuritaires avant d'être transmises à la méthode CursorSetForce. Il est également possible d'utiliser un champ Vector3 standard.

  • Awake() : Récupère le composant Inverse3 à partir du GameObject actuel ou de l'un de ses enfants.

  • OnEnable() : Enregistre la fonction de rappel OnDeviceStateChanged issue de la mise à jour haptique, dans un fil d'exécution distinct, après l'appel de la méthode Awake et à chaque fois que le script est activé.

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

  • OnDeviceStateChanged : Récupère le vecteur force de la fenêtre Inspecteur et le transmet à Inverse3 au moyen de la méthode CursorSetForce.

    IMPORTANT : La fonction de rappel est déclenchée par le fil d'exécution haptique à une fréquence élevée, allant de 1kHz à 8kHz. Il est essentiel de s'assurer que tout le code de cette fonction de rappel est hautement optimisé.

Utilisation​

Avant d'entrer en mode Lecture, assurez-vous de tenir le curseur. L'appareil devrait passer à l'état Force Control, indiqué par un voyant vert. Vous pouvez ensuite explorer l'espace de travail de l'appareil en ajustant la force de sortie à l'aide des glissières.

attention

Le réglage des forces fera bouger Inverse3. Assurez-vous que votre espace de travail est dégagé et tenez toujours le curseur. Pour les consignes de sécurité, consultez l'article Utilisation sécuritaire.

définir-force-curseur

Mode de contrôle de la position​

De la même façon, créez un script PositionControl.cs C# pour contrôler la position de l'appareil et attachez-le au GameObject Haptic Origin.

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

Assurez-vous que le script ForceControl et tout autre script contrôlant l'appareil sont désactivés.

contrôle-de-position

Semblable à l'exemple précédent :

  • Utilisez positionX, Y, and Z pour ajuster la position à l'aide des glissières pendant le mode Lecture.

    La plage sélectionnée Range(-0.1, 0.1) correspond à peu près à la position maximale atteignable.

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

Cependant, il existe des différences :

  • La fonction de rappel OnDeviceStateChanged, à chaque trame haptique, récupère le vecteur de position de la fenêtre Inspecteur, l'ajoute à WorkspaceCenterLocalPosition, et l'envoie à Inverse3 au moyen de la méthode CursorSetLocalPosition.

Avant d'entrer en mode Lecture, tenez le curseur près de la position centrale. L'appareil devrait passer à l'état position control (indiqué par un voyant bleu). Vous pouvez ensuite explorer l'espace de travail de l'appareil en ajustant la position de sortie à l'aide des glissières.

attention

Lors du réglage de la position, Inverse3 se mettra en mouvement. Assurez-vous que l'espace de travail est dégagé et ne contient aucun objet de valeur, et tenez toujours le curseur. Pour de plus amples renseignements, consultez l'article Utilisation sécuritaire.

définir-position-curseur