Premiers pas avec le package Inverse Unity
Ce guide présente la configuration de base et propose un exemple simple pour illustrer l'utilisation fondamentale du package Inverse Unity d'Haply , notamment l'installation du package, la mise en place d'un Haptic Rig et la création de scripts simples permettant de contrôler la force et la position.
Pour obtenir des informations détaillées et découvrir des techniques avancées, consultez les tutoriels.
Compatibilité entre les 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 version ultérieure
Prérequis
- Installez le Haply Inverse SDK, version 3.1.0 ou ultérieure.
- Assurez-vous que le service «Haply s inverses » est opérationnel.
- Assurez-vous que vos périphériques « Inverse3 » et « VerseGrip » sont connectés et calibrés avant de lancer la scène.
Le logiciel fait l'objet d'un développement continu afin d'améliorer la prise en charge de Inverse3. Pour toute aide, remarque ou demande, n'hésitez pas à nous contacter.
Installation
Le paquet Inverse Unity est disponible via le Scoped Registry de Unity. Pour intégrer le paquet :
-
Ouvrez Edit > Project Settings > Package Manager. Ajoutez un nouveau Scoped Registry avec :
- Nom :
Haply Robotics - URL :
https://unitypackages.haply.co - Champ(s) d'application :
co.haply

- Nom :
-
Accédez à Fenêtre > Gestionnaire de paquets, cliquez sur le bouton ajouter +, puis sélectionnez Ajouter un paquet par nom. Saisissez
co.haply.inverseet cliquez sur Ajouter.
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 (une main). Cette action permet de configurer un environnement complet comprenant le contrôleur « Inverse3 » et le VerseGrip.
Votre scène comprendra désormais :
- Haptic Device Mapper: gère l'affectation des périphériques à l'aide du service «Haply Inverse ».
- Origine haptique: met à l'échelle et positionne la configuration haptique dans la scène.
- Contrôleur haptique: gère la force ou la position du curseur à partir des données des périphériques Inverse3 et de VerseGrip.
- Cursor: contient les composants « Inverse3 » Cursor et « VerseGrip Cursor » destinés à l'affichage dans la scène.

Pour plus d'informations sur les composants du paquet, consultez la page de documentation consacrée à l'architecture globale.
En mode Play, la sphère se déplacera et tournera en synchronisation avec le curseur Inverse3 et l'orientation du VerseGrip.


Mode de contrôle de la force
Créez un script ForceControl.cs C# et associez-le au GameObject Origine haptique.
Ce script vous permet d'appliquer des forces à l'appareil Inverse3 à l'aide des barres de défilement 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));
}
}
Explication du script
-
forceX, Y, Z: composantes 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 à la méthodeCursorSetForce. Il est également possible d'utiliser un champVector3norme. -
Awake(): Récupère le composant Inverse3 à partir du GameObject actuel ou de l'un de ses enfants. -
OnEnable(): Enregistre la fonction de rappelOnDeviceStateChangedrésultant de la mise à jour haptique, dans un thread distinct, après l'appel de la méthodeAwakeet à chaque fois que le script est activé. -
OnDisable(): Désactive la fonction de rappel et réinitialise la force lorsque le script est désactivé ou que l'application se ferme. -
OnDeviceStateChanged: Récupère le vecteurforcede la fenêtre Inspecteur et le transmet à Inverse3 à l'aide de la méthodeCursorSetForce.IMPORTANT : La fonction de rappel est déclenchée par le fil d'exécution haptique à une fréquence élevée, comprise entre 1 kHz et 8 kHz. Il est essentiel de s'assurer que l'ensemble du code de cette fonction de rappel est hautement optimisé.
Utilisation
Avant de passer en mode Lecture, veillez à maintenir le curseur enfoncé. L'appareil devrait alors passer en mode « Force Control », signalé par un voyant vert. Vous pouvez ensuite explorer l'espace de travail de l'appareil en réglant la force de sortie à l'aide des curseurs.
Le réglage des forces entraînera le déplacement de l'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 en toute sécurité ».

Mode de contrôle de la position
De la même manière, créez un script PositionControl.cs C# pour contrôler la position de l'appareil et l'associer au GameObject Origine haptique.
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.
Comme dans l'exemple précédent :
- Utilisez
positionX, Y, and Zpour régler la position à l'aide des barres de défilement en mode Lecture.La plage sélectionnée
Range(-0.1, 0.1)correspondent à peu près à la position maximale pouvant être atteinte. - La méthode
Awakerécupère le composant Inverse3. - La méthode
OnEnableenregistre la fonction de rappelOnDeviceStateChangedrésultant de la mise à jour haptique, dans un thread distinct, après l'appel de la méthodeAwakeet à chaque fois que le script est activé. - La méthode
OnDisabledésactive la fonction de rappel et réinitialise la force lorsque le script est désactivé ou que l'application se ferme.
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 à l'aide de la méthodeCursorSetLocalPosition.
Avant de passer en mode Lecture, placez le curseur près de la position centrale. L'appareil devrait alors passer en mode « position control » (signalé par un voyant bleu). Vous pouvez ensuite explorer l'espace de travail de l'appareil en ajustant la position de sortie à l'aide des curseurs.
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 maintenez toujours le curseur enfoncé. Pour plus d'informations, consultez l'article « Utilisation en toute sécurité ».
