Catégories
Tutoriel Unity

Tutoriel – Réalité augmentée avec Unity3D

Dans ce tutoriel, nous allons voir comment faire de la réalité augmentée.
J’ai déjà fait un tutoriel à ce sujet, mais celui-ci remonte à plusieurs années… Et depuis Unity3D a bien évolué sur le sujet. Ils ont intégré Vuforia, mais aussi ARCore de Google. Vous avez maintenant le choix.

Pour ce tutoriel, nous allons utiliser ARFoundation, le package de Unity qui rassemble ARKit, qui est utilisé pour iOS et ARCore, comme vu plus haut pour Android.

Notre objectif est de scanner une surface et de pouvoir y ajouter un GameObject dessus quand on touche l’écran du téléphone.

Le code source de ce tutoriel, se trouvera en bas de la page.

Installer les packages nécessaires

Dans un premier temps, nous allons installer les modules et packages pour pouvoir faire de la réalité augmentée dans le projet que nous avons créé.

Assurez-vous que vous avez installé la plateforme Android. Dans Unity Hub allez dans Installs et ajoutez les modules ci-dessous :

Dans votre projet, allez dans Window > Package Manager, et installez les packages suivants :

  • AR Foundation
  • AR Subsystems
  • ARCore XR plugin

Configurer l’environnement pour supporter AR Foundation

Ajoutez un GameObject AR Session et un AR Session Origin à votre scène.
Supprimez la Main Camera de la scène, car une caméra se trouve dans le AR Session Origin.

Retirez Vulkan dans Other Settings :

Dans XR Settings, cochez ARCore supported.

Détection d’une surface plane

Pour détecter une surface plane, il existe des composants qui vont nous faciliter la vie (AR Plane Manager).
Ajoutez ce composant à notre GameObject AR Session Origin.
Dans les paramètres du composant, il attend un Prefab (que nous créerons après), un mode de détection.

Ajoutez un AR Default Plane à la scène, ce sera la modélisation de la surface détectée. Ce GameObject permet de personnaliser la surface.
Faite le glisser dans le dossier Assets du projet pour le transformer en Prefab.

Supprimez ensuite le GameObject de la scène.
Dans le composant AR Plane Manager, faite glisser le Prefab que nous avons créé.

Script gérant l’objet à poser sur la surface

Nous allons pouvoir commencer à coder un peu. Créez un script, que nous appellerons ARController. Il nous faut une référence à notre GameObject que nous allons utiliser.

J’ai créé un cube avec un Material comme objet à placer sur notre surface.

using UnityEngine;
using System.Collections.Generic;
using UnityEngine.XR.ARFoundation;
using UnityEngine.XR.ARSubsystems;
public class ARController : MonoBehaviour
{
    [SerializeField]
    private GameObject model;
    private ARRaycastManager aRRaycastManager;
    private Vector2 touchPosition;
    private List<ARRaycastHit> arHits = new List<ARRaycastHit>();

    void Awake()
    {
        aRRaycastManager = GetComponent<ARRaycastManager>();
    }

    void Update()
    {
        if (Input.touchCount > 0)
        {
            touchPosition = Input.GetTouch(0).position;
            
            if (aRRaycastManager.Raycast(touchPosition, arHits, TrackableType.PlaneWithinPolygon))
            {
               Pose pose = arHits[0].pose;
                Instantiate(model, pose.position, pose.rotation);
            }
        }
    }
}

Ajoutez ce script au AR Session Origin et faites glisser le Prefab de votre GameObject qui sera ajouté sur la surface dans la propriété Model.

Une petite explication du code ci-dessus :
Ce script récupère le AR Raycast Manager du AR Session Origin. Pour comprendre ce qu’est un Raycast, je vous invite à lire le tutoriel que j’ai rédigé sur ce sujet.

Ensuite on attend que l’utilisateur appuie sur l’écran. Si c’est sur la surface, on ajoute une instance de notre objet dessus à l’endroit où l’on a appuyé.

Tester notre application

Si vous êtes sur un téléphone Android, assurez-vous que votre téléphone est en mode développeur pour pouvoir tester directement en le branchant par usb.

Dans Build Settings, sélectionnez la plateforme Android, et ajoutez la scène que nous avons créé à celles qui faudra compiler (Scenes in Build).

Voilà ce que ça donne pour moi :

Conclusion

On peut réaliser une application de réalité augmentée assez rapidement. Comme dit en début de tutoriel, l’avantage de AR Foundation, c’est de pouvoir développer sur Android et iOS sans faire trop de code spécifique pour une plateforme.

Une des évolutions, serait que l’ajout des objets sur la surface ne soit pas constant (tant que vous appuyez, des objets seront ajoutés) ou bien pouvoir éditer l’objet (cliquer sur un objet et faire apparaître une interface pour le redimensionner par example).

Par Shinochi

Développeur Web Fullstack expert Drupal 8, et otaku par la même occasion.

Passionné par le japon, je partage quelques critiques sur les animes et mangas que j'ai regardé.
Je développe des jeux sur Unity3D à mes heures perdue.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *