Premiers pas avec le package Inverse Unity
Ce guide décrit la configuration de base et présente, à l'aide d'un exemple simple, les fonctionnalités principales du package « Inverse Unity » d'Haply : l'installation du package, la mise en place d'un dispositif haptique ainsi que la création de scripts simples pour le contrôle de la force et de la position.
Vous trouverez des informations détaillées et des techniques avancées dans les tutoriels.
Prise en charge des versions
- Unity 2021.3.x LTS : pris en charge
- Unity 2022.1.x LTS : pris en charge
- Unity 6000.x LTS : pris en charge
- Haply Inverse SDK: 3.1.0 ou version ultérieure
Conditions préalables
- Installez-le Haply Inverse SDK version 3.1.0 ou une version plus récente.
- Assurez-vous que le service Inverse d'Haply est opérationnel.
- Assurez-vous que vos appareils Inverse3 et VerseGrip sont connectés et calibrés avant de lancer la prise de vue.
Ce logiciel fait l'objet d'améliorations constantes afin d'optimiser la prise en charge d'Inverse3 . Pour toute demande d'assistance, de commentaires ou de renseignements, n'hésitez pas à nous contacter.
Installation
Le package Inverse Unity est disponible via le Scoped Registry de Unity. Pour intégrer ce package, procédez comme suit :
-
Sélectionnez Édition > Paramètres du projet > Gestionnaire de paquets. Ajoutez un nouveau registre à portée spécifique en indiquant les informations suivantes :
- Nom :
Haply Robotics - URL :
https://unitypackages.haply.co - Portée(s) :
co.haply

- Nom :
-
Appelez-nous Fenêtre > Gestionnaire de paquets Ensuite, cliquez sur le bouton ajouter + puis sélectionnez Ajouter un paquet par nom. Entrez
co.haply.inverseAccédez à la page et cliquez sur Ajouter.
Une fois l'installation terminée, le gestionnaire de paquets affiche le paquet Inverse.
Configuration du Haptic Rig
Pour créer un « Haptic Rig », accédez à GameObject > Haply Inverse > Haptic Rig (une main). Cela permet de configurer un environnement complet comprenant la manette « Inverse3 » et le VerseGrip.
Votre scène comprend ensuite :
- Haptic Device Mapper: gère l'affectation des périphériques via le service «Haply Inverse ».
- Origine haptique: permet de redimensionner et de positionner la configuration haptique au sein de la scène.
- Contrôleur haptique: gère la force et la position du curseur en fonction des données fournies par Inverse3 et de VerseGrip.
- Curseur: contient les composants «Inverse3 » et « VerseGrip » destinés à l'affichage dans la scène.

Vous trouverez plus de détails sur les composants de cette offre sur la page « Architecture globale ».
En mode « Play », la bille se déplace et tourne de manière synchronisée avec le curseur de l’ Inverse3 et de l'orientation du VerseGrip.


Mode « Force-Control »
Créer un script C# ForceControl.cs et attachez-le au GameObject Origine haptique an.
Ce script vous permet d'appliquer des forces à l'appareil à l'aide des curseurs de l'Inspecteur Inverse3 à appliquer.
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 ; elles garantissent que les forces, avant d'être transmises à la méthodeCursorSetForcerester dans des limites sûres. Une autre solution consisterait à utiliser un champ standardVector3être utilisés. -
Awake(): Appelle le composant Inverse3 du GameObject actuel ou de l'un de ses objets enfants. -
OnEnable(): Enregistre la fonction de rappelOnDeviceStateChangedpour la mise à jour haptique dans un fil de discussion distinct, après que la méthodeAwakelorsqu'il a été appelé, et à chaque fois que le script est activé. -
OnDisable(): Annule l'enregistrement du callback et réinitialise la puissance lorsque le script est désactivé ou que l'application est fermée. -
OnDeviceStateChanged: Appelle le vecteurforceà partir de la fenêtre Inspector et le redirige à l'aide de la méthodeCursorSetForcean das Inverse3 continuer.IMPORTANT : la fonction de rappel est déclenchée par le thread haptique à une fréquence élevée, comprise entre 1 kHz et 8 kHz. Il est essentiel que l'ensemble du code de cette fonction de rappel soit fortement optimisé.
Utilisation
Avant de passer en mode « Play », assurez-vous de maintenir le curseur enfoncé. L'appareil devrait alors passer en mode « Force Control », reconnaissable à un voyant vert. Vous pouvez ensuite parcourir la zone de travail de l'appareil en ajustant la puissance délivrée à l'aide des curseurs.
Le réglage des forces entraîne le déplacement de Inverse3 . Assurez-vous que votre espace de travail est dégagé et maintenez le curseur enfoncé à tout moment. Vous trouverez les consignes de sécurité dans l'article consacré à l'utilisation en toute sécurité.

Mode de contrôle de position
Créez également un script C# PositionControl.cs pour contrôler la position de l'appareil et l'attacher au GameObject Origine haptique an.
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 ou tout autre script contrôlant l'appareil est désactivé.
De la même manière que dans l'exemple précédent :
- Utilisez
positionX, Y, and Z, afin de Position à régler à l'aide de curseurs pendant le mode Lecture.La zone sélectionnée
Range(-0.1, 0.1)correspond approximativement à la position maximale pouvant être atteinte. - La méthode
Awakeappelle le composant Inverse3 ab. - La méthode
OnEnableenregistre la fonction de rappelOnDeviceStateChangedà partir de la mise à jour haptique dans un fil de discussion distinct après l'appel de la méthodeAwakeet à chaque fois que le script est activé. - La méthode
OnDisableVous annulez l'enregistrement du callback et réinitialisez la force lorsque le script est désactivé ou que l'application est fermée.
Il existe toutefois des différences :
- Le callback
OnDeviceStateChangedprend, à chaque trame haptique, le vecteur de position issu de la fenêtre « Inspector », et l'ajoute àWorkspaceCenterLocalPositionet l'envoie à l'aide de la méthodeCursorSetLocalPositionInverse3.
Avant de passer en mode lecture, placez le curseur près de la position centrale. L'appareil devrait passer en mode de contrôle de position (indiqué par un voyant bleu). Vous pouvez ensuite explorer la zone de travail de l'appareil en ajustant la sortie de position à l'aide des curseurs.
Lors du réglage de la position, l'Inverse3 se déplace. Assurez-vous que la zone de travail ne comporte aucun objet de valeur et maintenez le curseur enfoncé à tout moment. Pour plus de détails, consultez l'article consacré à la sécurité d'utilisation.
