Interaction avec le regard pour Oculus Go

Un objet pointé par le regard

Le regard permet de créer des interactions dans une application de réalité virtuelle. Cet article montre comment déclencher une action lorsque le regard arrive sur un objet ou le quitte, avec un Oculus Go.

La base: entrée et sortie du regard

  • Démarrer et configurer un projet pour Oculus Go
  • Installer l’asset Oculus Integration depuis l’Asset Store
  • Supprimer l’objet Main Camera de la hiérarchie
  • Ajouter le prefab Oculus/VR/Prefabs/OVRCameraRig à la scène
  • Sur l’objet OVRCameraRig ajouter un composant OVRPhysicsRaycaster (attention, ne pas confondre avec PhysicsRaycaster).
  • Sauver la scène, puis ouvrir Assets/Oculus/VR/Scenes/UI et copier l’objet OVRGazePointer. Revenir dans la scène de départ et coller dans la hiérarchie.
    • Configurer sa propriété Ray Transform sur l’objet CenterEyeAnchor
  • Dans la hiérarchie, ajouter un objet Event System (Create > UI > Event System)
    • Désactiver son composant StandaloneInputModule
    • Ajouter le composant OVRInputModule
      • Configurer son RayTransform sur l’objet CenterEyeAnchor
      • Configurer sa propriété Cursor sur l’objet OVRGazePointer
  • Créer ou sélectionner un objet qui doit réagir au regard (la cible)
  • Ajouter un nouveau composant (script) avec les fonctions GazeEnter et GazeExit. Choisir un meilleur nom que GazeEventTargetExample. L’exemple ci-dessous, change la taille de l’objet survolé et la restaure lorsque le regarde le quitte.
using UnityEngine;

public class GazeEventTargetExample : MonoBehaviour
{
    Vector3 originalScale;

    public void GazeEnter()
    {
        Debug.Log("GazeEnter");
        originalScale = transform.localScale;
        transform.localScale = originalScale * 1.1f;
    }

    public void GazeExit()
    {
        Debug.Log("GazeExit");
        transform.localScale = originalScale;
    }
}
  • Ajouter à l’objet cible le composant EventTrigger.
    Ce composant permet de connecter une ou plusieurs actions à exécuter en réponse à un événement. Ici il s’agit d’appeler les fonctions qu’on a écrites dans le script GazeEventTargetExample.
    • Ajouter 2 types d’événements (bouton Add New Event Type): PointerEnter et PointerExit
    • Pour chaque événement
      • Cliquer le + pour ajouter une action
      • Sélectionner l’objet cible et la fonction GazeEnter pour le premier et GazeExit pour le 2e.
EventTrigger connecté aux fonctions de GazeEventTargetExample

Action après délai

Dans l’exemple ci-dessus, le regard qui arrive sur un objet indique qu’il va se passer quelque chose.

Ci dessous on va compléter l’exemple en détruisant l’objet si le regard reste assez longtemps dessus.

Au passage on a profité pour rendre configurable deux propriétés:

  • killDelay: Délai en secondes entre l’entrée du regard et la destruction de l’objet
  • gazeScale: changement d’échelle à appliquer lorsqu’on regarde l’objet

La variable enterTime mémorise le temps à l’entrée du regard ou vaut -1 lorsque le regard n’est pas sur l’objet.

Dans la fonction Update(), on calcule le temps écoulé depuis l’entrée du regard et on détruit l’objet si le délai est atteint.

using UnityEngine;

public class GazeKiller : MonoBehaviour
{
    public float killDelay = 3;
    public float gazeScale = 1.1f; 

    float enterTime = -1;
    Vector3 originalScale;

    // Update is called once per frame
    void Update()
    {
        if (enterTime > 0 && Time.time - enterTime > killDelay)
        {
            Destroy(gameObject);
        }
    }

    public void GazeEnter()
    {
        enterTime = Time.time;

        originalScale = transform.localScale;
        transform.localScale = originalScale * gazeScale;
    }

    public void GazeExit()
    {
        enterTime = -1;

        transform.localScale = originalScale;
    }
}

Tags: , ,

Comments are closed.