Hai mai lavorato con augmented reality (o realtà aumentata, o AR) 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?

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 articolo presume che tu abbia già installato i due engine.

 

Impostare l’ambiente di sviluppo per l’augmented reality

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 AR 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:

 

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:

 

Fig.2
Fig.2

 

Vuforia ImageTarget e Collider

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:

 

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:

 

Fig.4
Fig.4

 

Il ColliderManager

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 Augmented Reality, molto interessante, pensa puoi programmare una bottiglia di acqua trasformandola in spada laser e spostare con essa oggetti 3D! Se vuoi puoi leggerlo qui.

Se desideri acquista 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 Augmented Reality 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

 

🔥438
Vota questo articolo

Lascia un commento

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