Opprett et Pokémon GO Style Augmented Reality Game med Vuforia

Hva du skal skape

1. Introduksjon

I det første innlegget i denne serien snakket vi om hvor fantastisk Vuforia er for å skape Augmented Reality-opplevelser, og nå er vi klare til å praktisere disse konseptene i en faktisk app. I denne opplæringen begynner vi å leke med Augmented Reality ved hjelp av Vuforia on Unity 3D. Vi lærer hvordan du konfigurerer Vuforia og begynner å utvikle et AR-spill fra bunnen av, ved å vedta en logikk som ligner den som brukes på Pokémon GO!

Det vil ikke være nødvendig å ha noen tidligere erfaring på Unity eller Vuforia for å følge denne opplæringen.

Hvis du ønsker å grave dypere, hvorfor ikke lære om en av de mest grunnleggende av begreper AR, markører, i vår korte kurs:

1.1. Quick Recap: Hvordan virker Vuforia?

Vuforia bruker enhetens kamerainnføring kombinert med akselerometer og gyroskopdata for å undersøke verden. Vuforia bruker datasyn å forstå hva det ser på kameraet for å skape en modell av miljøet. Etter å ha behandlet dataene, kan systemet lokalisere seg selv i verden, kjenne dets koordinater: hvor er opp, ned, venstre, høyre og så videre.

Hvis du ikke vet hva Vuforia handler om, ta en titt på det første innlegget i denne serien.

1.2. Hva skal vi lære?

Denne opplæringen er delt inn i to deler. I dette vil vi se noen av spesifikasjonene til Vuforia på Unity 3D, vi lærer å sette opp miljøet, og vi skal også begynne å utvikle et lite AR-spill som heter Shoot the Cubes. Vi vil være spesielt oppmerksom på ARCamera Prefab, en av de viktigste delene av Vuforia i Unity.

I den andre delen fortsetter vi å utvikle Shoot the Cubes-spillet, legge til interaktivitet og gjøre det mer interessant. Denne delen vil ikke gå for mye inn i Vuforias særegenheter, da ideen vil være å utforske noen muligheter som Unity tilbyr for å skape en engasjerende Augmented Reality-opplevelse.

2. Vuforia på enhet

Enhet er en populær og kraftig spillmotor som er enkel å bruke og kan kompilere spill for flere plattformer. Det er noen fordeler ved å bruke Unity for å skape AR-opplevelser med Vuforia. Det er mulig å målrette mot alle Vuforias støttede systemer, inkludert smarte briller. Det er enklere å bruke, takket være Prefabs gitt av Vuforias SDK. Ved å bruke bare Unity er det mulig å få tilgang til alle funksjonene som er tilgjengelige på Vuforia.

2.1. Vuforia Prefabs

Du kan få tilgang til alle Vuforias funksjoner på Unity ved hjelp av Vuforia prefabs. Alt du trenger å gjøre er å dra objektet til scenen og konfigurere det. Som navnet antyder, er prefabs som maler for å lage og klone Unity-objekter komplett med komponenter og egenskaper. For eksempel, ImageTarget representerer bilder som kan brukes som mål. La oss ta en titt på Vuforia prefabs tilgjengelig på Unity:

  • ARCamera: Den viktigste prefab. Den styrer den generelle AR-opplevelsen, styrer gjengekvaliteten, definerer sentrum av verden, enhetskameraet som skal brukes, de maksimale målene som skal spores, og så videre. I denne opplæringen vil vi konsentrere oss om å forstå hvordan du bruker dette objektet.
  • Targets: Alle Vuforia-målene har sin egen prefab: ImageTarget, MultiTarget, CylinderTarget, ObjectTarget, UserDefinedTargetBuilder, VuMark, FrameMarker. Disse målene vil bli anerkjent av ARCamera og start en handling, som å vise et 3D-objekt eller en animasjon.
  • CloudRecognition: Brukes for å få tilgang til mål som er definert i Vuforia-skyssystemet.
  • SmartTerrain og Rekvisitt: Disse objektene brukes i Smart Terrain-funksjonen.
  • TextRecognition og Ord: Prefabs brukes i tekstgenkjenningsfunksjonen.
  • VirtualButton: Vuforia kan forstå mål som knapper som kan trykkes fysisk av brukeren. Denne prefab vil hjelpe deg å bruke denne ressursen.

3. Skape vår første AR-opplevelse

Spillet som vi skal utvikle er enkelt, men det illustrerer prinsippene for Augmented Reality godt, og det vil lære oss noen av Vuforias grunnleggende. Spillets mål er å finne og skyte terninger som flyr rundt i rommet. Spilleren vil søke rundt kubene ved hjelp av hans eller hennes enhet og "trykk" for å skyte på boksene. Vi vil ikke bekymre oss om score, nivå eller noe sånt, men du kan enkelt utvide på disse aspektene av spillet selv.

3.1. Forbereder enhet for Vuforia

Før vi begynner å leke, må vi forberede Unity for Vuforia. Prosessen er ganske enkel, og vi må i utgangspunktet importere Vuforias SDK-pakke og legge til en ARCamera prefab til vårt prosjekt.

  • Opprett en utvikler konto på Vuforia.
  • Lag innloggingen og last ned Vuforia SDK for Unity.
  • Åpne Enhet og opprett et nytt prosjekt kalt "Skyt kubene".
  • Når Unity-prosjektvinduet åpnes, går du til Eiendeler> Importpakke> Egendefinert pakke og velg den nedlastede SDK.
  • Importer alt.
  • Slett Kamera objekt i hierarki vindu.
  • Gå til lisensbehandling på Vuforias utviklerportal og opprett en ny lisens ved hjelp av utviklerkontoen din.
  • Kopier lisensnøkkelen.
  • Tilbake til Unity, i Prosjekt vindu, gå til Eiendeler> Vuforia> Prefabs> ARCamera.Velg elementet og dra det til hierarki vindu.
  • Med ARCamera valgt, i Inspektør panel, gå til Vuforia Behavior (Script), finn feltet App lisensnøkkel, og lim inn lisensen du opprettet i Vuforias utviklerportal.
  • Klikk på Søke om knappen nær toppen av Inspektør ruten for å legge til lisensnøkkelen for alle ARCamera prefabs på dette prosjektet.

3.2. Tester om Vuforia jobber

Det er på tide å sjekke om miljøet fungerer riktig. 

Bruke datamaskinens kamera

Hvis du har et webkamera på datamaskinen, kan du trykke på Unitys avspillingsknapp for å sjekke om ARCamera Jobber. Det vil være mulig å gjenkjenne mål ved hjelp av webkameraet; Det vil imidlertid ikke være mulig å bruke sensordata for å teste din AR-opplevelse. Hvis kamerainnmatingen ikke viser Spill vindu, er det en mulighet for at kameraet ditt ikke er kompatibelt med webkameraprofilen som tilbys av ARCamera

Konfigurere programmet å kjøre på en enhet

Den beste måten å teste ditt Vuforia-program på er direkte på enheten. Vi samler prosjektet for Android, men de samme trinnene gjelder for iOS-enheter.

  • Først må vi lagre scenen vi jobber med. Gå til Fil> Lagre scene.
  • Velg Eiendeler mappe og opprett en ny mappe som heter scener.
  • Lagre denne scenen som ShootTheCubesMain.
  • Gå til Fil> Bygg innstillinger.
  • Å velge Android og klikk på Bytt plattform. Hvis dette alternativet er deaktivert, må du laste ned ønsket Unity SDK for enheten.
  • Klikk på Spillerinnstillinger og konfigurer prosjektet i Inspektør vindu.
  • Vær oppmerksom på noen alternativer: Slå av Auto Graphics API og sørg for at OpenGLES2 er valgt for Grafikk-API alternativ.
  • Skriv inn Bundle Identifier.
  • For Android-enheter, sørg for at Minimum API-nivå valgt er API 9 eller større. Du må også bruke ARMv7 for Enhetsfilter alternativ.
  • Hvis du fulgte trinnene riktig, er prosjektet klar til å bli bygget. Men hvis dette er første gang du samler et Unity-prosjekt for Android eller iOS, må du konfigurere Unity for disse enhetene. Følg denne veiledningen for Android og dette for iOS.
  • For å kjøre prosjektet, gå tilbake til Bygg innstillinger og klikk på Bygg og kjøre.

Etter bygningen blir applikasjonen installert på enheten. For nå, alt du bør forvente er å se kameraet feed på enheten uten noen feil. Hvis du har det, fungerte alt riktig.

3.3. Bruk av ARCamera Prefab

Målet med Shoot the Cubes spillet er å lete etter og skyte flygende kuber med enhetens kamera og sensorer. Denne tilnærmingen ligner den som ble brukt på Pokémon GO. For å oppnå dette, trenger vi bare å bruke Vuforia ARCamera ferdighus.

Det er mange skript knyttet til ARCamera. For nå er den eneste du trenger å forstå, den Vuforia Oppførsel manus. La oss se på alternativene:

  • App lisensnøkkel: Hvor Vuforia-lisensnøkkelen skal settes inn.
  • Kameraenhetsmodus: Kontrollerer gjengivelsen av objektene.
  • Maksimalt samtidig sporet bilder: Definerer de maksimale målene sporet samtidig. Vuforia anbefaler ikke mer enn fem samtidig.
  • Maksimalt samtidige sporte objekter: Definerer maksimal gjenstand som spores samtidig. Igjen, anbefaler Vuforia ikke mer enn fem samtidig.
  • Last inn objektmål på deteksjon: Laster objektet som er knyttet til målet så snart målet er oppdaget.
  • Kamera retning: Velg hvilket enhetskamera du vil bruke.
  • Speilvideo bakgrunn: Definerer om kamerainnføringen skal speiles.
  • Word Center Mode: Det mest relevante alternativet for prosjektet vårt. Det definerer hvordan systemet skal finne sentrum av verden. 
    • SPECIFIC_TARGET: Bruker et bestemt mål som en referanse til verden.
    • FIRST_TARGET: Det første målet oppdaget vil bli brukt som en referanse til verden.
    • KAMERA: Bruker kameraet som et referansepunkt til verden.
    • DEVICE_TRACKING: Bruker enhetens sensor som referanse til å angi verdens posisjoner. Dette er det alternativet vi må velge for vårt lille prosjekt.

For nå, alt det du må endre i ARCamera er den Word Center Mode. Klikk på ARCamera element i hierarkiet og i Inspektør ruten, endre World Center Mode til DEVICE_TRACKING.

3.4. Bruke enhetens sensor for å finne sentrum av verden

La oss legge til en kube på scenen og teste om ARCameraen fungerer som den skal.

  • Sørge for at ARCameraposisjon og rotasjon er satt til 0 på X-, Y- og Z-aksene.
  • Lage en Cube objekt fra Game Object> 3D Object> Cube.
  • Flytt terningen StillingZ akse til 10 og 0X og Y.
  • Scale objektet til 2XY, og Z akser.
  • Rotere kuben 45 grader på X og Y akser.
  • Du kan trykke på avspillingsknappen for å sjekke om kuben er riktig plassert.
  • Når du er sikker på at kuben er riktig plassert, bygg prosjektet på nytt og test det på enheten. Å bygge, gå til Arkiv> Bygg og kjør.

Du må se deg rundt ved å rotere enheten for å finne terningen. Du vil legge merke til at gjenstanden forblir stille på samme sted, selv etter at du roterer enheten vekk fra den. Det er som om kuben eksisterer i den virkelige verden, men kan bare ses med enhetskameraet.

3.5. Sette elementets posisjon i henhold til ARCamera

Det første problemet med søknaden vår så langt er at kuben kan vises hvor som helst og brukeren må se seg rundt for å finne den. Siden verdens sentrum er definert i henhold til enhetens sensorer, kan vi ikke være sikker på elementets faktiske posisjon. Dette skyldes at brukeren kan starte med enheten i en hvilken som helst retning, og fordi målerotasjonen måles, varierer fra enhet til enhet.

For å sikre at AR-enhetene starter på grunn av brukeren, er det enklest å vente på at Vuforia skal definere sentrum av verden og finne den ARCamera rotasjon og deretter å ordne startplasseringen av elementer i henhold til den retningen.

Vi lager en Spawn Manager å definere plasseringen av terningene som skal hages. Lederen vil definere sin posisjon i henhold til ARCamera rotasjon. Det venter til rotasjonen er satt, og flytt deretter 10 enheter til forsiden av kameraet.

  • Opprett to tomme objekter med Spillobjekt> Lag tomt. Høyreklikk på et av objektene du nettopp har opprettet, og gi nytt navn til det _SpawnController.
  • Endre navnet på det andre tomme objektet til _GameManager.
  • I Prosjekt vindu, velg Eiendeler mappe og opprett en ny mappe som heter scripts.
  • I scripts mappe, opprett et C # -skript som heter SpawnScript.
  • Dra SpawnScript til _SpawnController.
  • Dobbeltklikk på SpawnScript å redigere den.

Først la oss legge til Vuforia-pakken.

bruker UnityEngine; bruker System.Collections; // Vi må bruke Vuforia-pakken til //. Kontroller at alt fungerer ved hjelp av Vuforia; offentlig klasse SpawnScript: MonoBehaviour 

Å få tilgang ARCamera, bruk Camera.main. La oss lage en funksjon for å få kameraposisjonen og sette kuben til å bli spunnet 10 enheter fremover fra dette punktet.

offentlig klasse SpawnScript: MonoBehaviour // Definer posisjonen hvis objektet // i henhold til ARCamera-posisjonen privat bool SetPosition () // få kameraposisjonen Transform cam = Camera.main.transform; // still inn 10 enheter fremover fra kameraposisjonen transform.position = cam.forward * 10; returnere sant; 

Vi endrer posisjonen bare en gang fra Start funksjon. Forandre posisjon er en coroutine som vil vente litt tid før du setter stilling.

 privat bool mPositionSet; ugyldig start () // Definere gyteposisjonen StartCoroutine (ChangePosition ());  // Vi bruker en Coroutine til å gi en liten // forsinkelse før du stiller inn posisjonen privat IEnumerator ChangePosition () yield returner nye WaitForSeconds (0.2f); // Definer sperringsposisjonen bare en gang hvis (! MPositionSet) // endre posisjonen bare hvis Vuforia er aktiv hvis (VuforiaBehaviour.Instance.enabled) SetPosition ();  

La oss teste skriptet:

  • Tilbake i enhet, klikk på _SpawnController objekt og bruk Game Object> 3D Object> Sphere å sette inn en sfære inne _SpawnController
  • Velg sfæren og kontroller at stillingen er satt til 0 på X-, Y- og Z-aksen. 
  • Nå overlapper vi kuben og _SpawnController slik at du kan legge merke til betydningen av manuset. Å velge _SpawnController og sett posisjonen til 0 på X- og Y-aksen og til 10 på Z-aksen, samme posisjon som kuben. 

Elementene begynner å overlappe; Men når du bygger og kjører programmet på en enhet, vil du se at _SpawnController og sfæren vil dukke opp foran kameraet, og kuben vil være på et annet sted. Gå videre og test det! Pass på at du ser på enheten når appen starter.

4. Konklusjon

Gratulerer, du har opprettet din første Augmented Reality-opplevelse. Ja, det er litt grovt, men det fungerer! I denne opplæringen har du lært hvordan du bruker Vuforias viktigste prefab i Unity, the ARCamera. Du lærte også hvordan du konfigurerer den og hvordan du bruker enhetssensorene for å skape illusjonen om at et virtuelt objekt settes inn i verden.

4.1. Hva blir det neste?

I neste opplæring vil vi forbedre dette prinsippet for å skape et ekte spill og en mer engasjerende opplevelse. Vi fortsetter å utvikle Shoot the Cubes-spillet, legger til noe interaktivitet og utforsker Unitys muligheter for å skape et interessant AR-spill. Vi gjør kuberne gyte og fly rundt, og vi lar spilleren søke og ødelegge dem ved å skyte en laser ut av enheten.

Ser deg snart!

Spesiell takk for bildevektor designet av Freepik, lisensiert under Creative Commons CC BY-SA.