Inhoudsopgave:

Augmented Reality Vuforia 7 grondvlakdetectie. Ajarnpa
Augmented Reality Vuforia 7 grondvlakdetectie. Ajarnpa

Video: Augmented Reality Vuforia 7 grondvlakdetectie. Ajarnpa

Video: Augmented Reality Vuforia 7 grondvlakdetectie. Ajarnpa
Video: Vuforia 7 - Model Targets - new Augmented Reality 3D Tracking 2024, November
Anonim
Augmented Reality Vuforia 7 grondvlakdetectie
Augmented Reality Vuforia 7 grondvlakdetectie
Augmented Reality Vuforia 7 grondvlakdetectie
Augmented Reality Vuforia 7 grondvlakdetectie

Vuforia's augmented reality SDK voor Unity 3D gebruikt ARCore en ARKit om grondvlakken in AR te detecteren. De tutorial van vandaag zal hun native integratie in Unity gebruiken om een AR-app voor Android of IOS te maken. We zullen een auto uit de lucht op de grond laten vallen en de deuren gaan automatisch open als we dichtbij komen. We gaan ook in op het maken van video in AR. Om dit te kunnen volgen, moet Unity 3D op uw computer zijn geïnstalleerd (het is gratis). Deze instructies zijn voor totale beginners, dus we zullen alles in detail bespreken!

Het beste van Vuforia's SLAM is het aantal IOS- en Android-apparaten dat het ondersteunt. Een volledige lijst met apparaten is hier te vinden:

library.vuforia.com/articles/Solution/grou…

Stap 1: Start een nieuw project

Start een nieuw project
Start een nieuw project

Download Unity 3D hier als je het nog niet hebt:

Zorg ervoor dat u ondersteuning voor Vuforia Augmented Reality en Android of IOS installeert, afhankelijk van welk apparaat u heeft.

Open Unity en start een nieuw Unity-project, noem het zoals je wilt.

Laten we eerst de app opzetten om uit te bouwen, zodat we het niet vergeten. Sla de scène dus op en noem deze "hoofd".

Ga naar bestand, bouw instellingen en schakel uw bouwplatform over naar Android of IOS. Navigeer naar de XR-instellingen in de spelerinstellingen en vink Vuforia Augmented Reality Supported aan.

Als je op Android zit, hoef je niets anders te doen, maar ga op IOS naar andere instellingen en zorg ervoor dat je iets invoert voor je bundel-ID. Gebruik de indeling "com. YourCompanyName. YourAppName."

Voer alles in voor de beschrijving van het cameragebruik en wijzig de minimale buildversie van het doel in ten minste 9.0.

Sluit dat af en laten we nu al het andere instellen.

Stap 2: Laten we Vuforia instellen

Laten we Vuforia opzetten
Laten we Vuforia opzetten

Laten we nu alles instellen.

Ga naar gameobject in het hoofdmenu en klik op ARCamera. Verwijder nu de hoofdcamera uit je scène.

Selecteer de ARCamera en klik aan de rechterkant in de inspecteur op Open Vuforia Configuration. Klik op de verzameling gegevenssets en schakel alles uit omdat we hier geen afbeeldingsdoelen gebruiken.

Klik op device tracker en klik op track device pose. Verander de tracking van roterend in positioneel.

Ga nu terug naar het tabblad met game-objecten en klik op Vuforia, Ground Plane en Plane finder. Dit herbergt de scripts die ons grondvlak vinden.

Het laatste dat we nodig hebben is het grondvlak, dus ga opnieuw naar het spelobject in het hoofdmenu en klik op Vuforia, Grondvlak en kies Grondvlakpodium. Nu zal alles wat we hieraan hebben, in AR verschijnen.

Stap 3: Voeg een nieuw script toe

Voeg een nieuw script toe
Voeg een nieuw script toe
Voeg een nieuw script toe
Voeg een nieuw script toe

Het standaardgedrag van deze grondvlakdetectie is om elke keer dat u op het scherm drukt een nieuw object te plaatsen. Wat we willen, is dat het object elke keer dat u op het scherm drukt, wordt verplaatst. Dus klik met de rechtermuisknop in uw activamap en maak een nieuw C#-script aan. Noem het "DeployStageOnce" en vervang alles door deze code:

systeem gebruiken;

met behulp van UnityEngine; met behulp van Vuforia; openbare klasse DeployStageOnce: MonoBehaviour { openbare GameObject AnchorStage; privé PositionalDeviceTracker _deviceTracker; privé GameObject _previousAnchor; public void Start () { if (AnchorStage == null) { Debug. Log ("AnchorStage moet worden opgegeven"); opbrengst; } AnchorStage. SetActive(false); } public void Awake() { VuforiaARController. Instance. RegisterVuforiaStartedCallback(OnVuforiaStarted); } public void OnDestroy() { VuforiaARController. Instance. UnregisterVuforiaStartedCallback(OnVuforiaStarted); } private void OnVuforiaStarted() { _deviceTracker = TrackerManager. Instance. GetTracker(); } public void OnInteractiveHitTest (HitTestResult resultaat) {if (resultaat == null || AnchorStage == null) { Debug. LogWarning ("Hit-test is ongeldig of AnchorStage niet ingesteld"); opbrengst; } var anchor = _deviceTracker. CreatePlaneAnchor(Guid. NewGuid(). ToString(), resultaat); if (anker! = null) { AnchorStage.transform.parent = anchor.transform; AnchorStage.transform.localPosition = Vector3.nul; AnchorStage.transform.localRotation = Quaternion.identity; AnchorStage. SetActive(true); } if (_previousAnchor != null) { Destroy(_previousAnchor); } _previousAnchor = anker; } }

Om ervoor te zorgen dat dit script wordt gebruikt, moeten we de functie OnInteractiveHitTest() aanroepen, dus ga terug naar Unity en klik op het game-object plane finder. Wijzig de modus van Automatisch in Interactief. Sleep het script dat we zojuist hebben gemaakt naar het game-object van de vliegtuigzoeker. Verwijder het ContentPositioningBehavior-script. Je ziet een plek voor een game-object in het DeployStageOnce-script, sleep de vliegtuigzoeker daarheen en zoek dit script, kies de functie OnInteractiveHitTest bovenaan de lijst. Nu wordt onze functie aangeroepen wanneer de gebruiker op het scherm klikt!

Stap 4: Laten we de auto toevoegen

Laten we de auto toevoegen
Laten we de auto toevoegen

Download dit gratis 3D-model van de auto hier (zorg ervoor dat u de.obj-versie hebt):

www.turbosquid.com/3d-models/max-exterior-…

Download ook dit geluid, want we gaan het spelen als de auto de grond raakt:

freesound.org/people/PaulMorek/sounds/1967…

Pak beide bestanden uit en sleep ze naar uw activamap.

Klik op de auto en kijk naar rechts, wijzig Ingebedde materialen gebruiken om externe materialen (verouderd) te gebruiken in het vervolgkeuzemenu bovenaan. Nu kunnen we de kleur van alle materialen op de auto veranderen.

Sleep de auto op je grondplan en maak er een kind van. Verander de schaal in.035 op de x, y en z.

Ga nu door elk van de kinderspelobjecten van de auto en verander hun materialen in elke gewenste kleur.

Voeg een stijve carrosseriecomponent toe aan het rootgame-object van de auto en voeg ook een box-collider toe, schaal deze zodat deze de hele auto bedekt. Voeg ook een box-collider toe aan het grondvlakpodium en schaal het zodat het een paar keer breder is dan het grondvlakpodium. Op deze manier kunnen we de auto uit de lucht laten vallen en zal hij de grond raken met behulp van Unity's ingebouwde physics-engine.

Stap 5: Zet de auto in de lucht

Zet de auto in de lucht
Zet de auto in de lucht

Voeg een audiobroncomponent toe aan het rootgame-object van de auto, sleep het auto-ongelukgeluid naar de plek van de audioclip.

Nu moeten we een script maken dat de auto in de lucht brengt wanneer de gebruiker op het scherm drukt en vervolgens het crashgeluid afspeelt wanneer de auto de grond raakt. Dus, klik met de rechtermuisknop in de activamap en maak een nieuw C#-script aan en noem het "CarController".

Vervang alle code daar door dit:

met behulp van System. Collections;

met behulp van System. Collections. Generic; met behulp van UnityEngine; openbare klasse CarController: MonoBehaviour { private bool soundPlayed = false; // Update wordt één keer per frame aangeroepen void Update () { if (!soundPlayed && transform.localPosition.y <.05f) { soundPlayed = true; StartCoroutine (DelayPlaySound ()); } } public void MoveCar(){ transform.localPosition += new Vector3 (0, 10, 0); transform.eulerAngles += nieuwe Vector3 (5, 20, 5); geluid afgespeeld = false; } IEnumerator DelayPlaySound(){ opbrengst retour nieuwe WaitForSeconds (.2f); GetComponent (). Speel (); } }

Voeg de MoveCar-functie toe aan de OnInteractiveHitTest-gebeurtenis zoals in de bovenstaande afbeelding. Nu wordt het gebeld wanneer de gebruiker op het scherm klikt.

Stap 6: Lambo deuren

Lambo deuren
Lambo deuren

Dus als je het autogame-object uitbreidt en de deuren vindt, zul je merken dat beide deuren één enkel gaas zijn. Als we de deuren willen openen, is onze enige optie Lambo-deuren die verticaal opengaan. Om dit te laten werken, moeten we eerst hun draaipunt wijzigen.

Maak een leeg spelobject dat een kind van de auto is. Sleep de deuren naar binnen en maak ze een kind van dit nieuwe spelobject. Verplaats het bovenliggende spelobject naar de plaats waar het draaipunt zou moeten zijn, bij de scharnieren van de deur. Schuif nu de kinderdeuren weer op hun plaats. Als we nu de deuren ouder draaien, zit het draaipunt op de juiste plaats.

We gaan een script maken dat de deuren opent als je dicht bij de auto komt, maar voordat we dat doen, hebben we een manier nodig om het evenement te "triggeren". Voeg een box-collider toe aan het spelobject van je deur en schaal het zodat het in beide richtingen een klein stukje over de auto gaat. Vink "isTrigger" aan. Voeg nu een box-collider toe aan de hoofdcamera en schaal deze op de juiste manier. Controleer ook "isTrigger". Voeg een Rigid Body-component toe aan uw camera en schakel "useGravity" uit. Met je camera geselecteerd, verander je de tag naar "Hoofdcamera" bovenaan het infovenster.

Voeg een nieuw script toe met de naam "LamboDoorBehavior" en voeg de onderstaande code toe. Sleep het script naar de ouder van je deur.

met behulp van System. Collections;

met behulp van System. Collections. Generic; met behulp van UnityEngine; openbare klasse LamboDoorBehavior: MonoBehaviour {private float currAngle = 0; privé float gewenstAngle = 0; // Update wordt één keer per frame aangeroepen void Update () { currAngle = Mathf. LerpAngle (currAngle, wantedAngle, Time.deltaTime * 3f); transform.localEulerAngles = nieuwe Vector3 (currAngle, 0, 0); } public void OpenDoors(){ wantedAngle = 60f; } public void CloseDoors(){ desireAngle = 0; } void OnTriggerEnter(Collider col){ if (col. CompareTag ("Hoofdcamera")) { OpenDoors (); } } void OnTriggerExit(Collider col){ if (col. CompareTag ("Hoofdcamera")) { CloseDoors (); } } }

Dit script zorgt ervoor dat je deuren langzaam openen wanneer je ze in AR sluit door de Lerp()-functie in eenheid te gebruiken die interpoleert tussen twee punten (of in dit geval twee hoeken).

Stap 7: Video afspelen in AR

Video afspelen in AR
Video afspelen in AR
Video afspelen in AR
Video afspelen in AR

Het laatste dat we moeten doen, is video afspelen in AR.

Klik met de rechtermuisknop op een game-object dat een kind van je auto is en maak een 3D-object, Quad. Zo weet je zeker dat de quad een kind van je auto is. Plaats en verklein deze quad zodanig dat hij in het dashboard van uw auto past en eruitziet alsof hij daar hoort te zijn. Hier gaan we de video op afspelen.

Voeg een videospelercomponent toe aan uw quad. Wijzig de bron in URL en zoek een harde link naar een. MP4-bestand of sleep een videobestand naar uw activamap en sleep die clip vervolgens naar de lege sleuf. Als je een video vanaf een URL wilt streamen, is Instragram een geweldige bron. Klik met de rechtermuisknop op een Instagram-video in Google Chrome en klik op inspecteren. Zoek de div met de video en kopieer de link vanaf daar (ik heb deze methode hierboven afgebeeld).

Zorg ervoor dat u de lus aanvinkt als u wilt dat deze meer dan één keer wordt afgespeeld. Voeg een audiobroncomponent toe aan dit game-object en verander de uitvoerbron in audiobron op de videospeler. Sleep uw nieuw gemaakte audiobron naar die sleuf.

Eindelijk zijn we klaar!

Stap 8: Zet de app op je telefoon

Zet de app op je telefoon!
Zet de app op je telefoon!

Als je voor Android aan het bouwen bent, kun je gewoon naar het bestand gaan en op bouwen en uitvoeren klikken terwijl je telefoon is aangesloten.

Als je uitbouwt naar een iPhone of iPad, zorg er dan voor dat je Xcode downloadt uit de app store. Meld u ook aan voor een gratis Apple-ontwikkelaarsaccount op www.apple.developer.com. Ga naar bestand en klik op bouwen. Open het bestand dat is gemaakt met Xcode en sluit uw telefoon aan. Kies je ontwikkelteam en druk op de afspeelknop.

Het kan zijn dat je de camera een beetje moet bewegen, maar wacht even en tik op het scherm en je zou je auto uit de lucht op de grond moeten zien vallen! Nu kun je naar binnen lopen en je video afspelen in het dashboard!

Veel plezier en laat het me weten als je vragen hebt in de comments!

Aanbevolen: