Aller au contenu

IV — Interaction en VR

Pour les interactions en VR nous allons avoir recours à un module standard nommé "XR Interaction toolkit". Il implémente un système d'interaction et de navigation très complet.

Il est installé par défaut dans votre projet quand vous choisissez le preset "VR (Core)" lors de la création d'un nouveau projet Unity.
Créer un nouveau projet en choisissant la version 2022 d'Unity, si le preste VR Core) n'est pas installé, installez-le.

Le projet s'ouvre sur une scène nommée "SampleScene" contenant un certain nombre d'exemples d'interaction possible. Je vous conseille de charger une scène plus complète. Dans la fenêtre "Project" cherchez "DemoScene" puis double-cliquez sur "DemoScene" pour lancer la scène.

Si vous voulez que cette scène soit celle qui apparaisse dans le casque dans une minute il faut le spécifier. Aller dans "File" > "Build Settings", dans la partie haute de la fenêtre qui est apparue se trouve un gestionnaire de scènes. Cliquez sur "Add Open Scenes", puis décochez "Scenes/SampleScene" et cochez à la place la scène que nous avons ajouté.

Instructions relatives aux casques Pico

Rendez-vous à cette adresse et télécharger le "PICO Unity Integration SDK".
Une fois téléchargée, décompressée l'archive où vous souhaitez.

Dans Unity, localisez "Windows" dans la barre en haut, puis "Package Manager". Dans la fenêtre qui est apparue cliquez le symbole "+" puis choisissez "Add package from disk". Naviguez jusqu'au dossier que vous avez décompressé et sélectionnez le fichier nommé "package.json" pour importer le package à votre projet.

Une fois cela fait une fenêtre pourra apparaître automatiquement ("Platform settings") suivez ses recommandations.

Ouvrez "Edit" > "Project Settings" > "XR Plugin management", assurez-vous que PICO est le seul élément sélectionné.

Plus bas à gauche cliquez sur "Project Validation" puis cliquez sur "Fix All". Si des pages web apparaissent (en chinois) vous pouvez les ignorer.

Instructions relatives à la VR en général

Ouvrez "Edit" > "Project Settings" > "Player". Regardez les options dans "Other Settings", faites particulièrement attention à avoir la bonne configuration pour ls éléments qui suivent :

Brancher le casque

Assurez vous que le casque Pico soit allumé, ensuite branchez le à l'ordinateur avec un cable USB d'une longueur suffisante. Nous allons maintenant créer l'application (une compilation du projet produisant une application qui tournera indépendamment de l'éditeur Unity).
Pour ce faire en haut à gauche cherchez "File" > "Build settings". Vous voyez la fenêtre ci-dessous.

La plupart des casques VR autonomes aujourd'hui sont des appareils Android comme les téléphones portables.
En branchant le casque à l'ordinateur il est reconnu comme tel et Unity peu directement charger une application VR sur le casque.
Cliquez sur "Refresh" (voir image ci-dessous) puis dans la liste déroulante choisissez l'option commençant par "Pico".
Si l'appareil Pico n'apparaît pas dans la liste assurez-vous qu'il soit bien branché à l'ordinateur, il est aussi possible que vous ayez à cliquer sur une notification dans le casque demandant d'accepter le debugging par USB.

Lancer l'application sur le casque

Utilisez les boutons "patch" et "patch and run" : le premier crée l'application et la charge sur le casque, le second lance l'application automatiquement en sus. Pour permettre de faire "patch" ou "patch and run" l'option "Development Build" doit être cochée juste en dessous.

En revanche le bouton "build" va créer un fichier .apk (application android) sur l'ordinateur à la place. Un fichier .apk peut être distribué pour partager votre application.

Les moyens d'interaction

La scène de démo de "XR interaction toolkit" propose plusieurs exemples d'interaction au moyen des manettes.
Découvrez les différentes interaction dans le casque.

Callback

Le toolkit utilisé s'appuient largement sur le système de "callback" (UnityEvent). Un callback est une fonction qui est appelée lorsqu'un évènement est déclenché. Par exemple lorsque l'utilisateur presse un bouton de la manette ou interagit avec un objet.

Dans cet exemple, lorsqu'un utilisateur presse le bouton [5] (voir image ci-dessous ; "grab") cela correspond à l'action "select" qui va appeler une fonction choisie à l'avance. Ici un son est produit.

Cette méthode par callback gérée dans l'éditeur est très pratique pour réduire le besoin en programmation de votre projet.

En programmant

Si vous tenez à vérifier avec du code qu'un bouton a été appuyé/relâché utilisez la manière suivant.

// A insérer au début du fichier
using UnityEngine.XR.Interaction.Toolkit.Inputs.Readers;

[...]
// A insérer dans le corps de la classe
public XRInputButtonReader button;

[...]
// Retourne True si le bouton vient d'être appuyé puis relaché
button.ReadWasCompletedThisFrame()

Car button est publique il apparaîtra dans l'éditeur, plus précisément dans l'Inspector pour le GameObject qui contient ce script.
Ajoutez les éléments qui manquent comme dans l'image ci-dessous. Dans cet exemple, on attend un clique du bouton [6] (trigger).

Les moyens de navigation

Au moyen de la manette tenue en main gauche en manipulant l'élément marqué [1] dans l'image ci-dessous (joystick, thumbstick; ) vous pouvez faire des déplacements (translation) sur l'axe horizontal. Avec le même élément [1] en main droite vous pouvez pivoter (faire des rotations).

Encore à la main droite, si vous poussez le joystick [1] et le gardez maintenu vers l'avant vous enclencherez la fonctionnalité de téléportation.
Un faisceau bleu dépassant de la manette en VR va apparaître pour que vous visiez le point de téléportation.

Il existe deux modes de téléportations :

  • Contrainte : représentée par des zones de petites superficies (cercle blanc dans l'image ci-dessous) une téléportation contrainte permet un seul point de relocalisation, en son centre.
  • Libre : la relocalisation est possible sur toute une surface pré-déterminée (plan horizontal blanc dans l'image ci-dessous).