Premiers pas avec le package Inverse Unity
Ce guide vous aide à configurer les paramètres de base et propose des exemples simples illustrant l'utilisation de base du package Inverse Unity disponible sur Haply . Il aborde notamment l'installation du package, la configuration d'un banc d'essai haptique, ainsi que la création de scripts simples pour le contrôle de la force et de la position.
Pour plus de détails et pour découvrir des techniques avancées, veuillez consulter le tutoriel.
Prise en charge 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 version ultérieure
Conditions préalables
- Haply Inverse SDK Veuillez installer la version 3.1.0 ou une version ultérieure.
- Haply Vérifiez si le service Inverse fonctionne correctement.
- Avant de lancer la scène, assurez-vous que les appareils « Inverse3 » et « VerseGrip » sont connectés et calibrés.
Ce package fait l'objet d'un développement continu afin d'améliorer la prise en charge d'Inverse3 . Si vous avez besoin d'aide, si vous souhaitez nous faire part de vos commentaires ou si vous avez des demandes, veuillez utiliser la rubrique « Contactez-nous».
Installation
Le package Inverse Unityest disponible via le Scoped Registryde Unity. Pour l'intégrer, veuillez suivre les étapes suivantes :
-
Ouvrez le menu Édition > Paramètres du projet > Gestionnaire de paquets. Ajoutez un nouveau registre à portée et définissez les valeurs suivantes :
- Nom :
Haply Robotics - URL :
https://unitypackages.haply.co - Champ d'application (Scope(s)) :
co.haply

- Nom :
-
Fenêtre > Gestionnaire de paquets Dans le menu ajouter + Cliquez sur le bouton et Ajouter un paquet par nomSélectionnez-le.
co.haply.inversesaisissez et AjouterCliquez sur .
Une fois l'installation terminée, le paquet Inverse apparaîtra dans le gestionnaire de paquets.
Paramètres de la ligue Haptic
Pour créer un « Haptic Rig », accédez au menu GameObject > Haply Inverse > Haptic Rig (une main). Cette opération permet de créer un environnement complet comprenant une manette « Inverse3 » et le composant VerseGrip.
La scène comprend désormais les éléments suivants :
- Haptic Device Mapper: Haply Gère l'attribution des périphériques selon le principe du service inverse.
- Origine haptique: permet de régler la taille et la position des paramètres haptiques au sein de la scène.
- Contrôleur haptique: Inverse3 gère la force ou la position du curseur en fonction des données fournies par le VerseGrip.
- Curseur: comprend les composants «Inverse3 » et « VerseGrip » destinés à la représentation des scènes.

Pour plus d'informations sur les composants du package, veuillez consulter la page de documentation « Architecture globale».
En mode « Play », la sphère Inverse3 se déplacent et tournent en synchronisation avec la direction du curseur et du VerseGrip.


Mode de contrôle de la puissance
ForceControl.cs Créer un script C# et l'utiliser Origine haptique Le relier à un GameObject.
Ce script permet, à l'aide des curseurs de l'Inspecteur, de Inverse3 Vous pouvez mettre l'appareil sous tension.
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));
}
}
Description du script
-
forceX, Y, Z: composante du vecteur de force réglable à l'aide d'un curseur. La forceCursorSetForceVeillez à ce qu'il reste dans les limites de sécurité avant d'être transmis à la méthode. Ou normeVector3Vous pouvez également utiliser ce champ. -
Awake(): Actuellement, dans le GameObject ou l'un de ses enfants, Inverse3 Importe le composant. -
OnEnable():AwakeAprès l'appel de la méthode, puis à chaque fois que le script est activé, la mise à jour haptique s'effectue dans un thread distinct.OnDeviceStateChangedEnregistre une fonction de rappel. -
OnDisable(): Lorsque le script est désactivé ou que l'application est arrêtée, l'enregistrement du rappel est annulé et la puissance est réinitialisée. -
OnDeviceStateChanged: Dans la fenêtre « Inspecteur »forceRécupérer le vecteurCursorSetForceà l'aide de la méthode Inverse3à.Important : cette fonction de rappel est appelée par le thread haptique à une fréquence élevée comprise entre 1 kHz et 8 kHz. Il est essentiel de s'assurer que tout le code contenu dans cette fonction de rappel est hautement optimisé.
Mode d'emploi
Avant d'accéder au mode « Play », assurez-vous que le curseur est bien sélectionné. L'appareil doit passer en mode « Force Control », indiqué par un voyant vert. Vous pouvez ensuite explorer l'espace de travail de l'appareil tout en réglant la puissance à l'aide du curseur.
Si vous modifiez la puissance, le déplacement Inverse3 se produit. Assurez-vous que l'espace de travail est dégagé et maintenez toujours le curseur en place. Pour les consignes de sécurité, veuillez consulter le document « Utilisation en toute sécurité».

Mode de contrôle de position
De même, le contrôle de la position de l'appareil PositionControl.cs Générer un script C#, puis Origine haptique Le relier à un GameObject.
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, ainsi que tous les autres scripts permettant de contrôler l'appareil, sont désactivés.
Comme dans l'exemple précédent :
positionX, Y, and Zen utilisant le curseur en mode lecture EmplacementVeuillez régler [...].Sélectionné
Range(-0.1, 0.1)Cela correspond à peu près à la position maximale pouvant être atteinte.AwakeLa méthode est Inverse3 Importe le composant.OnEnableLa méthode estAwakeAprès l'appel de la méthode et à chaque fois que le script est activé, les mises à jour haptiques sont traitées dans un thread distinct.OnDeviceStateChangedEnregistre une fonction de rappel.OnDisableCette méthode désenregistre les rappels et réinitialise l'état lorsque le script est désactivé ou que l'application est arrêtée.
Il existe toutefois les différences suivantes :
OnDeviceStateChangedÀ chaque trame haptique, la fonction de rappel récupère le vecteur de position dans la fenêtre Inspecteur, puisWorkspaceCenterLocalPositionAprès avoir ajouté cela,CursorSetLocalPositionUtilisez la méthode pour envoyer les données à l'appareil Inverse3 .
Avant de passer en mode lecture, veillez à maintenir le curseur près du centre. L'appareil doit être en mode de contrôle de position (indiqué par un voyant bleu). Vous pouvez ensuite naviguer dans l'espace de travail de l'appareil en réglant la sortie de position à l'aide du curseur.
Lorsque vous ajustez la position, l'appareil Inverse3 se déplace. Assurez-vous qu'il n'y a pas d'objets de valeur dans la zone de travail et gardez toujours le curseur sous contrôle. Pour plus d'informations, consultez le document relatif à la sécurité d'utilisation.
