Démarrage rapide : Inverse Unity Package
Ce guide décrit la configuration de base et fournit un exemple simple pour démontrer l'utilisation fondamentale du Haply Inverse Unity Package, y compris l'installation du package, la configuration d'un Haptic Rig, et la création de scripts simples pour le contrôle de la force et de la position.
Pour plus de détails et de techniques avancées, consultez les didacticiels.
Soutien à la version
- Unity 2021.3.x LTS : pris en charge
- Unity 2022.3.x LTS : pris en charge
- Unity 2023.x.x (Tech Stream) : Expérimental
- Haply Inverse SDK: 2.0.0 ou supérieur
Conditions préalables
- Installez le SDK Haply Inverse version 2.0.0 ou supérieure.
- S'assurer que le service Haply Inverse est opérationnel.
- Confirmez que vos appareils Inverse3 et VerseGrip sont connectés et calibrés avant de lancer la scène.
Le paquet est en développement continu afin d'améliorer le support de l'Inverse3. Pour obtenir de l'aide, des commentaires ou des demandes, veuillez nous contacter.
Installation
Le package Inverse Unity est disponible via le Scoped Registry de Unity. Pour intégrer le paquetage :
-
Ouvrez Edit > Project Settings > Package Manager. Ajoutez un nouveau Scoped Registry avec :
- Nom :
Haply Robotics
- URL :
https://unitypackages.haply.co
- Portée(s) :
co.haply
- Nom :
-
Accès Fenêtre > Gestionnaire de paquets, cliquez sur le bouton ajouter + et sélectionnez Ajouter un paquet par nom. Entrer
co.haply.inverse
et cliquez sur Ajouter.
Une fois l'installation réussie, le gestionnaire de paquets affichera le paquet Inverse.
Mise en place de la plate-forme haptique
Pour créer un Haptic Rig, naviguez vers GameObject > Haply Inverse > Haptic Rig (une main). Cette action permet d'assembler 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 service inverse de Haply.
- Origine haptique: Échelle et position de l'installation haptique dans la scène.
- Contrôleur haptique: Gère la force ou la position du curseur en fonction des données des appareils Inverse3 et VerseGrip.
- Curseur: Contient les composants Inverse3Cursor et VerseGrip Cursor pour la représentation de la scène.
Pour plus de détails sur les composants du paquet, voir la page de documentation sur l'architecture globale.
En mode lecture, la sphère se déplace et tourne en synchronisation avec le curseur Inverse3 et l'orientation de VerseGrip.
Mode de contrôle de la force
Créer un ForceControl.cs
C# et l'attacher au fichier Origine haptique GameObject.
Ce script vous permet d'appliquer des forces au Inverse3 à l'aide des curseurs de l'inspecteur.
using Haply.Inverse.Unity;
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.TryResetForce();
}
private void OnDeviceStateChanged(Inverse3 inverse3)
{
inverse3.CursorSetLocalForce(forceX, forceY, forceZ);
}
}
Explication du scénario
-
forceX, Y, Z
: Composants du vecteur de force réglables à l'aide de curseurs, garantissant que les forces restent dans les limites de sécurité avant d'être transmises à l'unité de commande.CursorSetForce
méthode. Il est également possible d'utiliser uneVector3
pourrait être utilisé. -
Awake()
: Récupère le Inverse3 du GameObject actuel ou de son enfant. -
OnEnable()
: Enregistrer leOnDeviceStateChanged
de la mise à jour haptique dans un thread séparé après l'exécution de la fonctionAwake
et à chaque fois que le script est activé. -
OnDisable()
: Désenregistre le callback et réinitialise la force lorsque le script est désactivé ou que l'application s'arrête. -
OnDeviceStateChanged
: Recherche leforce
de la fenêtre de l'inspecteur et le transmet à la fenêtre de l'inspecteur. Inverse3 en utilisant leCursorSetForce
méthode.IMPORTANT : Le callback est déclenché par le thread haptique à une fréquence élevée, comprise entre 4 et 8 kHz. Il est essentiel de veiller à ce que tout le code de ce rappel soit hautement optimisé.
Utilisation
Avant d'entrer en mode lecture, assurez-vous que vous maintenez le curseur. L'appareil doit passer à l'état de contrôle de la force, indiqué par un voyant vert. Vous pouvez alors naviguer dans l'espace de travail de l'appareil en ajustant la force de sortie à l'aide des curseurs.
L'ajustement des forces entraîne le déplacement de l'Inverse3. Veillez à ce que votre espace de travail soit dégagé et tenez toujours le curseur. Pour les consignes de sécurité, reportez-vous à l'article Utilisation en toute sécurité.
Mode de contrôle de la position
De même, créez un PositionControl.cs
script C# pour contrôler la position de l'appareil et l'attacher à l'écran de l'appareil. Origine haptique Objet du jeu.
using Haply.Inverse.Unity;
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 Vector3 _basePosition;
private void Awake()
{
_inverse3 = GetComponentInChildren<Inverse3>();
}
protected void OnEnable()
{
_inverse3.DeviceStateChanged += OnDeviceStateChanged;
}
protected void OnDisable()
{
_inverse3.DeviceStateChanged -= OnDeviceStateChanged;
_inverse3.TryResetForce();
}
private void OnDeviceStateChanged(Inverse3 inverse3)
{
if (_basePosition == Vector3.zero)
{
_basePosition = inverse3.LocalPosition;
}
inverse3.CursorSetLocalPosition(_basePosition + new Vector3(positionX, positionY, positionZ));
}
}
Assurez-vous que le script ForceControl ou tout autre script contrôlant l'appareil est désactivé.
Comme dans l'exemple précédent :
- Utiliser
positionX, Y, and Z
pour régler le position en utilisant les curseurs en mode lecture.L'option sélectionnée
Range(-0.1, 0.1)
correspond à peu près à la position maximale réalisable. - Les
Awake
récupère la méthode Inverse3 de la composante. - Les
OnEnable
enregistre la méthodeOnDeviceStateChanged
de la mise à jour haptique dans un thread séparé après l'exécution de la fonctionAwake
et à chaque fois que le script est activé. - Les
OnDisable
désenregistre le rappel et réinitialise la force lorsque le script est désactivé ou que l'application s'arrête.
Il existe toutefois des différences :
- Les
OnDeviceStateChanged
enregistre d'abord lebasePosition
. Ensuite, à chaque image haptique, il prend le vecteur de position de la fenêtre de l'inspecteur, l'ajoute au vecteur de position de la fenêtre de l'inspecteur et l'ajoute au vecteur de position de l'inspecteur.basePosition
et l'envoie à l'Inverse3 à l'aide de la fonctionCursorSetPosition
méthode.
Avant d'entrer en mode lecture, maintenez le curseur enfoncé. L'appareil doit passer à l'état de contrôle de position (indiqué par une lumière bleue). Vous pouvez alors explorer l'espace de travail de l'appareil en ajustant la sortie de position à l'aide des curseurs.
Lorsque vous ajustez la position, l'Inverse3 se déplace. Veillez à ce que l'espace de travail soit libre de tout objet de valeur et tenez toujours le curseur. Pour plus de détails, reportez-vous à l'article Utilisation sûre.