Aller directement au corps du texte

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.
Note

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 :

  1. 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

    Configuration du registre par périmètre

  2. 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 .

    Ajout rapide de l'interface utilisateur UPM

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.

Ligue haptique (à une main)

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.

Inverse3 Inspecteur

Inspecteur de poignées

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

Contrôle de la force

Description du script​

  • forceX, Y, Z: composante du vecteur de force réglable à l'aide d'un curseur. La force CursorSetForce Veillez à ce qu'il reste dans les limites de sécurité avant d'être transmis à la méthode. Ou norme Vector3 Vous pouvez également utiliser ce champ.

  • Awake(): Actuellement, dans le GameObject ou l'un de ses enfants, Inverse3 Importe le composant.

  • OnEnable(): Awake Aprè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. OnDeviceStateChanged Enregistre 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 » force Récupérer le vecteur CursorSetForce à 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.

Avertissement

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é».

Réglage de la puissance du curseur

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.

Contrôle de position

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.

  • Awake La méthode est Inverse3 Importe le composant.
  • OnEnable La méthode est Awake Aprè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. OnDeviceStateChanged Enregistre une fonction de rappel.
  • OnDisable Cette 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, puis WorkspaceCenterLocalPositionAprès avoir ajouté cela, CursorSetLocalPosition Utilisez 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.

Avertissement

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.

Définition de la position du curseur