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.
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 :
-
Ouvrez Edit > Project Settings > Package Manager. Ajoutez un nouveau Scoped Registry avec :
- Nom :
Haply Robotics - URL :
https://unitypackages.haply.co - Scope(s) :
co.haply

- Nom :
-
Accédez à Window > Package Manager, cliquez sur le bouton add +, puis sélectionnez Add package by name. Saisissez
co.haply.inverseet cliquez sur Add.
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.

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.


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));
}
}
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éthodeCursorSetForce. Il est également possible d'utiliser un champVector3standard. -
Awake(): Récupère le composant Inverse3 à partir du GameObject actuel ou de l'un de ses enfants. -
OnEnable(): Enregistre la fonction de rappelOnDeviceStateChangedissue de la mise à jour haptique, dans un fil d'exécution distinct, après l'appel de la méthodeAwakeet à 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 vecteurforcede la fenêtre Inspecteur et le transmet à Inverse3 au moyen 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, 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.
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.

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.
Semblable à l'exemple précédent :
- Utilisez
positionX, Y, and Zpour 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
Awakerécupère le composant Inverse3. - La méthode
OnEnableenregistre la fonction de rappelOnDeviceStateChangedissue de la mise à jour haptique, dans un fil d'exécution distinct, après l'appel de la méthodeAwakeet à chaque fois que le script est activé. - La méthode
OnDisabledé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éthodeCursorSetLocalPosition.
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.
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.
