Passer directement au contenu principal

Premiers pas avec Inverse Unity Package

Ce guide explique, à l'aide d'une configuration de base et d'exemples simples, comment utiliser les fonctionnalités de base du package Inverse Unity d'Haply . Il aborde l'installation du package, la configuration d'un dispositif haptique, ainsi que la création de scripts simples pour le contrôle de la force et de la position.

Pour obtenir des explications détaillées ou découvrir des techniques avancées, veuillez consulterle tutoriel.

Prise en charge des versions​

  • Unity 2021.3.x LTS : version prise en charge
  • Unity 2022.1.x LTS : prise en charge
  • Unity 6000.x LTS : pris 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 que le service Inverse fonctionne correctement.
  • Avant de lancer la scène, assurez-vous que l'Inverse3 et le dispositif VerseGrip sont connectés et calibrés.
Remarque

Ce package fait l'objet d'un développement continu afin d'améliorer la prise en charge deInverse3 .N'hésitez pas à nous contacterpour toute question relative à l'assistance, vos commentaires ou vos demandes.

Installation​

Le package Inverse Unity est disponible dans le Scoped Registry de Unity. Pour l'intégrer, veuillez suivre les étapes suivantes.

  1. Ouvrez Édition > Paramètres du projet > Gestionnaire de paquets. Ajoutez un nouveau registre à portée en utilisant les informations suivantes :

    • Nom : Haply Robotics
    • URL : https://unitypackages.haply.co
    • Portée(s) : co.haply

    registre scopé

  2. Fenêtre > Gestionnaire de paquets Ouvrez,ajouter + Cliquez sur le bouton pour,Ajouter un paquet par nom Sélectionnez cette option. co.haply.inverse et saisissez,Ajouter Cliquez ici.

    upm-ui-quick-add

Une fois l'installation terminée, le paquet Inverse apparaîtra dans le gestionnaire de paquets.

Configuration du dispositif haptique​

Pour créer un « Haptic Rig », accédez àGameObject > Haply Inverse > Haptic Rig (une main). Cette opération permet de configurer un environnement complet comprenant les manettes «Inverse3 » et « VerseGrip ».

La scène comprendra désormais les éléments suivants :

  • Utilisez le service « Haptic Device Mapper: Haply Inverse Service » pour gérer l'affectation des périphériques.
  • Origine haptique: permet de redimensionner et de positionner la configuration haptique au sein de la scène.
  • Contrôleur haptique: Inverse3 Il gère la force ou la position du curseur en fonction des données du dispositif VerseGrip.
  • Curseur: pour l'affichage des scènes, il comprend les composants «Inverse3 Cursor » et « VerseGrip Cursor ».

haptique-rig

Pour plus d'informations sur les composants du package, veuillez consulterla page de documentation « Architecture globale».

En mode « Jeu », la sphère Inverse3 se déplacent et tournent en synchronisation avec la direction du curseur et de VerseGrip.

inverse3-Inspecteur

poignée-inspecteur

Mode de contrôle de la force​

ForceControl.cs Créer un script C#, puisOrigine haptique L'attacher à un GameObject. Ce script permet, à l'aide du curseur de l'Inspecteur, de Inverse3 Il est possible d'appliquer une force sur l'appareil.

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 des forces

Description du script​

  • forceX, Y, Z: Il s'agit des composantes du vecteur de force réglables à l'aide d'un curseur. La force est,CursorSetForce Avant d'être transmise à la méthode, elle est limitée afin de rester dans une plage sûre. Ou bien, la norme Vector3 Vous pouvez également utiliser le champ.

  • Awake(): À partir du GameObject actuel ou de ses enfants Inverse3 Récupérer le composant.

  • OnEnable(): Awake Après l'appel d'une méthode, ainsi qu'à chaque fois que le script est activé, à partir des mises à jour haptiques OnDeviceStateChanged Enregistre la fonction de rappel dans un autre thread.

  • OnDisable(): Lorsque le script est désactivé ou que l'application s'arrête, l'enregistrement du rappel est annulé et le système est réinitialisé.

  • OnDeviceStateChanged: depuis la fenêtre de l'inspecteur force Récupérer le vecteur, puisCursorSetForce à l'aide de la méthode Inverse3 Je le transfère vers.

    Important : ce callback est appelé par le thread haptique à une fréquence élevée, comprise entre 1 kHz et 8 kHz. Il est essentiel d'optimiser au maximum l'ensemble du code contenu dans ce callback.

Mode d'emploi​

Avant de passer en mode de jeu, assurez-vous que le curseur est bien maintenu. L'appareil passe alors en mode « Force Control », indiqué par un voyant vert. Vous pouvez ensuite régler la puissance à l'aide du curseur et déplacer le curseur dans l'espace de travail de l'appareil.

Avertissement

Lorsque vous réglez la puissance, le « Inverse3 » se met en mouvement. Assurez-vous qu’il n’y a pas d’obstacles dans l’espace de travail et veillez à maintenir le curseur en place. Pour connaître les consignes de sécurité, veuillez consulterl’article consacré à la sécurité d’utilisation.

curseur-force

Mode de contrôle de position​

De même, pour contrôler la position de l'appareil, PositionControl.cs Créer un script C#, puisOrigine haptique L'attacher à 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));
}
}

Vérifiez que le script ForceControl, ou tout autre script permettant de contrôler l'appareil, est désactivé.

Contrôle de position

Comme dans l'exemple précédent :

  • En mode lecture, à l'aide du curseur position Pour régler,positionX, Y, and Z utilise.

    Sélectionné Range(-0.1, 0.1) correspond à peu près à la position maximale pouvant être atteinte.

  • Awake La méthode est Inverse3 Récupérer le composant.
  • OnEnable La méthode consiste à,Awake Après l'appel d'une méthode, ainsi qu'à chaque fois que le script est activé, grâce à la mise à jour tactile OnDeviceStateChanged Enregistre la fonction de rappel dans un autre thread.
  • OnDisable Cette méthode désenregistre les callbacks et réinitialise l'état lorsque le script est désactivé ou que l'application s'arrête.

Il existe toutefois les différences suivantes :

  • OnDeviceStateChanged À chaque image tactile, la fonction de rappel récupère le vecteur de position depuis la fenêtre de l'Inspecteur, puis WorkspaceCenterLocalPosition En outre, CursorSetLocalPosition Envoyez-le à l'adresse Inverse3 à l'aide de la méthode.

Avant de passer en mode de lecture, maintenez le curseur près du centre. L'appareil devrait passer en mode de contrôle de position (indiqué par un voyant bleu). Vous pouvez ensuite régler la sortie de position à l'aide du curseur pour vérifier l'espace de travail de l'appareil.

Avertissement

Lorsque vous ajustez la position, « Inverse3 » se met en mouvement. Assurez-vous qu’il n’y a pas d’objets de valeur sur votre plan de travail et veillez à toujours maintenir le curseur. Pour plus de détails, veuillez consulterl’article consacré à la sécurité d’utilisation.

Réglage de la position du curseur