Realtà Aumentata tutorial programmare collisioni con Unity3D e Vuforia

Augmented Reality Logo

Realtà Aumentata tutorial programmare collisioni con Unity3D e Vuforia (tutorial)

 

 

Hai mai lavorato con Unity, augmented reality (o realtà aumentata) utilizzando Vuforia (logo) come engine? Vuoi capire come programmare collisioni tra oggetti in Unity, tramite un piccolo sample project, ma in un ambito di realtà aumentata? tutorial

Benissimo, questo è l’articolo che fa per te, quindi mettiti comodo e leggi con attenzione quanto segue.

L’unica premessa che faccio è che non ti spiegherò cosa è la realtà aumentata, per me è scontato che lo sai, e neanche ti dirò come installare Vuforia e Unity3D, quindi questo tutorial presume che tu abbia già installato i due engine; tuttavia se non sai come installare Vuforia puoi seguire il tutorial a questo link.

 

Impostare l’ambiente di sviluppo con Unity per realtà aumentata tutorial

Personalmente ritengo che Unity3D sia il miglior environment per creare realtà aumentata, ciò che farò è: prendere due immagini, trasformarle in due target, associare rispettivamente due modelli 3D (rappresentanti automobili) e durante la visualizzazione in realtà aumentata far apparire delle piccole esplosioni nel momento in cui una autovettura tocca la parte anteriore o posteriore dell’altra.

Passiamo all’azione.

Per questo progetto ho utilizzato Unity 2018.1.8f1 ma puoi scegliere qualsiasi build della serie 2018, semplicemente perchè trovi Vuforia già incluso e da attivare.

Una delle operazioni preliminari da compiere è la creazione e definizione del database, che in questo caso contiene soltanto le due immagini delle automobili, come in figura in basso:

 

realtà aumentata Fig.1
Fig.1

 

Esporta quindi il database e importalo in Unity, poi aggiungi il gameobject ARCamera dal menu di Vuforia e due istanze di tipo ImageTarget; seleziona ARCamera dalla finestra Hierarchy, clicca sul pulsante “Open Vuforia Configuration” e imposta a 2 il numero massimo di oggetti e immagini che Vuforia deve agganciare simultaneamente, come in figura seguente:

 

realtà aumentata tutorial Fig.2
Fig.2

 

Ora seleziona il primo ImageTarget che hai in precedenza aggiunto in Hierarchy e trascina dalla finestra Project il primo dei due modelli 3D, che dovresti aver preparato fin dall’inizio, sopra all’ImageTarget facendolo diventare un child di quest’ultimo.

Seleziona l’istanza del gameobject che contiene il 3D e aggiungi il componente RigidBody impostando Use Gravity = False e Is Kinematic = True.

Sempre nel modello 3D individua il child gameobject a cui è associato il componente Mesh Renderer e aggiungi i componenti BoxCollider e CapsuleCollider impostandone IsTrigger = True; i due collider devi posizionarli e ridimensionarli come in figura seguente, ossia nelle parti anteriore e posteriore del veicolo:

 

realtà aumentata tutorial Fig.3
Fig.3

 

Fatto ciò devi creare un effetto di fumo o di fiamme per simulare l’impatto, anche se esagerato è alla fine un game, quindi o te lo costruisci con il Particle System oppure ne recuperi uno free disponibile sull’Asset Store di Unity.

Una volta ottenuto crei una doppia istanza (nel mio esempio ho usato due effetti diversi secondo il lato urtato del veicolo) dell’FX e le incolli nell’istanza del modello 3D in cui hai creato i collider posizionando gli effetti esattamente dove hai posizionato i collider stessi.

Ora devi creare la seconda autovettura ripetendo gli stessi step seguiti finora per la prima; alla fine il risultato dovrebbe essere come in figura seguente:unity 3d tutorial

 

realtà aumentata Fig.4
Fig.4

 

Il ColliderManager nella Realtà Aumentata

Come avrai certamente notato, la figura mostra anche un componente chiamato ColliderManager, quello è lo script che devi creare per gestire la collisione; quindi creati uno script CSharp e incolla il seguente codice al suo interno:

 


using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class CollderManager : MonoBehaviour
{
   private static ParticleSystem fireFront;
   private static ParticleSystem fireBack;

   // Use this for initialization
   void Start ()
   {
      fireFront = GameObject.FindGameObjectWithTag("FireFrontA").GetComponent<ParticleSystem>();
      fireBack = GameObject.FindGameObjectWithTag("FireBackA").GetComponent<ParticleSystem>();
   }

   void OnTriggerEnter(Collider other)
   {
      if (other is BoxCollider)
      {
         fireFront.Play(true);
      }
      else if (other is CapsuleCollider)
      {
         fireBack.Play(true);
      }
   }

   void OnTriggerExit(Collider other)
   {
      if (fireFront.isPlaying == true)
         fireFront.Stop(true);

      if (fireBack.isPlaying == true)
         fireBack.Stop(true);
   }
}

 

Nel metodo Start() vengono valorizzate le due variabili private FireFront e FireBack con le due istanze degli effetti, puoi notare l’utilizzo di GameObject.FindGameObjectWithTag(“FireFrontA”).GetComponent<ParticleSystem>() poichè ho preferito l’utilizzo dei tag per brevità. Quindi se vuoi seguire questo codice devi definire due tag, chiamandoli FireFrontA e FireBackA, e devi associarli ai due gameobject che contengono le esplosioni.

Fai attenzione ad un particolare, durante la visione in augmented reality non è il target fisico, che hai nella mano, a far scattare il collider bensì il modello 3D vero e proprio che mostra Vuforia.

Nell’evento OnTriggerEnter() viene eseguito un test per verificare quale collider è stato intercettato e mandare in esecuzione l’effetto desiderato.

L’evento OnTriggerExit(), a sua volta, viene attivato quando il veicolo cessa di toccare il collider dell’altra autovettura, in esso sono contenute le istruzioni per interrompere l’esecuzione degli effetti nel caso siano ancora in play.

Perfetto, ti annuncio che sei arrivato alla conclusione, se non hai una telecamera supportata da Vuforia devi fare una build per iOS o Android e testarla sullo smartphone. Se vedi il risultato che ti ho mostrato nel video all’inizio dell’articolo significa che hai raggiunto l’obiettivo.

Prima di salutarti ti segnalo un altro articolo riguardo la Realtà Aumentata, uno unity 3d tutorial molto interessante, pensa puoi programmare una bottiglia di acqua trasformandola in spada laser e spostare con essa oggetti 3D! Ho anche scritto un altro unity 3d tutorial che ti permette di creare il portale interdimensionale di ARKit con Unity Vuforia.

Se desideri, inoltre, puoi acquistare il libro Augmented Reality for Developers: Build practical augmented reality applications with Unity, ARCore, ARKit, and Vuforia (Linowes e Babilinksi).
Ti consiglio di leggerlo se vuoi avere una panoramica dettagliata su Realtà Aumentata e Vuforia, quindi clicca sul link o sulla copertina del libro qui in basso. Grazie per la tua attenzione.

Acquista ora Augmented Reality for Developers: Build practical augmented reality applications with Unity, ARCore, ARKit, and Vuforia

 

🔥820 volte è stato letto questo articolo
Se ti è piaciuto questo articolo, lascia le tue stelle!

2 Comments

  • MIguel

    27 Maggio 2019 - 18:11

    There’s an issue, What happens if i collide cars in front to front?, fireback is played in both cars instead of firefront.

  • Fabio Carucci

    27 Maggio 2019 - 20:38

    Hello Miguel,

    Do you attached the ColliderManager to Car A (or B) only?
    Bye.

    -Fabio

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *