Sisukord:

Teeme MEMESile liitreaalsuse rakenduse !: 8 sammu
Teeme MEMESile liitreaalsuse rakenduse !: 8 sammu

Video: Teeme MEMESile liitreaalsuse rakenduse !: 8 sammu

Video: Teeme MEMESile liitreaalsuse rakenduse !: 8 sammu
Video: Muuseumid ja mänguline liikumine 2024, November
Anonim
Teeme MEMESile liitreaalsuse rakenduse!
Teeme MEMESile liitreaalsuse rakenduse!

Selles juhendis teeme Unity3D -s Androidi ja IOS -i jaoks liitreaalsuse rakenduse, mis kasutab meemide otsimiseks Google'i API -d. Kasutame Unity'is Vuforia maapinna tuvastamist, nii et see mobiilirakendus töötab enamiku Androidi ja IOS -i kasutajate jaoks. Vuforia kasutamine võimaldab meil ka pildid ühte kohta ankurdada, et saaksime sellest pildiväljast läbi käia ja objektid jääksid oma kohale.

Katsetame ka uut IBM Watsoni API -d, et saaksime neid otsinguid teha oma häälega ja kasutada nende loomuliku keele töötlemist.

Nii et halb uudis pole see, et kumbki neist API -dest pole täiesti tasuta, kuid hea uudis on see, et mõlemad on vabalt proovitavad. Google'i kohandatud otsingu API pakub teile 100 tasuta otsingut päevas ja IBM Watsoni API annab teile esimese kuu tasuta.

Lühidalt, see rakendus saab meie kõne Unity mikrofonist, saatke see IBM Watsoni serveritele, kes saadavad meile teksti tagasi. Seejärel võtame selle teksti ja saadame selle Google'i serveritesse, mis saadab meile JSON -vormingus piltide URL -ide loendi.

Samm: seadistage IBM Watsoni SDK Unity'is

Seadistage IBM Watsoni SDK Unity'is
Seadistage IBM Watsoni SDK Unity'is

Watsoni API käivitamiseks peate esmalt oma mandaadi nende saidilt hankima. Minge saidile Console.bluemix.net, looge ja logige sisse ning logige sisse. Minge oma IBM -i kontole ja navigeerige pilvavalukohaorgani ja looge uus ruum. Nüüd minge oma armatuurlauale ja klõpsake teenuste sirvimiseks, lisage kõne tekstiteenusele, sest seda me kasutame. Valige oma piirkond, organisatsioon ja ruum ning looge projekt. Nüüd näete oma API mandaati allosas.

Laadige Unity alla, kui teil seda veel pole, ja importige IBM Watsoni SDK Unity varalaost. Saame seda testida, luues tühja mänguobjekti ja nimetades selle IBM Watsoniks ning lisades voogesituse skripti näite. See skript on juba seadistatud salvestama heli ühtsusest ja saatma selle töötlemiseks Watsoni serveritesse.

Praegu kasutame seda näidiskripti, sest meil on veel palju teha, kuid võib -olla saame järgmisel korral Watsoni asjadesse sügavamale minna, sest tahaksin Vision API -ga midagi ette võtta.

2. samm. Testige IBM Watsoni tekst kõneks

Testige IBM Watsoni teksti kõneks
Testige IBM Watsoni teksti kõneks

See skript otsib kasutajaliidese tekstiobjekti, nii et saate luua uue kasutajaliidese nupu, mis annab meile vajaliku teksti ja me kasutame seda nuppu hiljem. Seadistage lõuend ekraani suurusega ja skaleerige nuppu veidi. Kinnitage see vasakusse alumisse serva. Lohistage see tekst tühja pesasse. Avage skript ja lisage meie IBM Watsoni mandaat, leidke, kus kasutatakse teksti "resultsField", ja määrake sellele ainult "alt.transcript", kuna kasutame seda teksti google'is otsimiseks. Nüüd, enne kui saame seda testida, peame teksti dünaamiliselt muutma, nii et kõik, mida ütleme, mahub kasti. Minge tagasi teksti juurde ja seadke see kõige sobivamaks. Selle testimiseks sisestage mõni tekst. Nüüd, kui klõpsame nupul Esita, transkribeeritakse meie sõnad tekstiks Watsoni tekst kõneks API -st.

3. toiming: seadistage Google'i kohandatud otsingu API

Seadistage Google'i kohandatud otsingu API
Seadistage Google'i kohandatud otsingu API

Järgmine asi, mida peame tegema, on seadistada Google'i kohandatud otsingu api seadistamiseks kasutamiseks Unity'is. Kõrgetasemel esitame Unitylt HTTP -päringu Google'i serveritele, mis saadab meile vastuse JSON -vormingus.

Nii et minge Google'i kohandatud otsingu JSON API seadistuslehele, klõpsake API võtme hankimiseks ja uue rakenduse loomiseks. Hoidke see lahti. Nüüd võime minna juhtpaneelile. Sisestage saidi otsimiseks kõik, pange sellele nimi ja klõpsake nuppu Loo.

Klõpsake juhtpaneelil ja lubage teha mõningaid muudatusi: tahame peamiselt meeme otsida ja pildiotsingu sisse lülitada. Otsingusaitide all lülitage see kogu veebile. Kõigi salvestamiseks klõpsake nuppu Värskenda.

Leidke nüüd Google'i api explorer ja minge kohandatud otsingu API -le. See võimaldab meil Google'ilt saadud JSON -vastuse vormindada. Nii et sisestage päringu jaoks praegu kõik, kleepige oma otsingumootori ID, sisestage filtrisse 1, et me ei saaks duplikaate, sisestage 10 numbri alla, sest see on maksimaalne tulemuste arv, mida saame korraga tagastada, sisestage otsingutüübiks pilt, sest see on kõik, mida me tahame tagastada. Alustuseks sisestage 1 ja lõpuks väljade alla „üksused/link”, sest iga tagastatava kauba puhul soovime ainult pildilinki. Nüüd, kui klõpsate käsku Käivita, näete, et saame tagasi 10 kena pildilinki.

Nüüd peame need pildid Unity'i viima.

Samm: seadistage Vuforia Unity'is

Seadistage Vuforia Unity'is
Seadistage Vuforia Unity'is

Laseme Vuforial töötada, et saaksime kasutada nende maapinna tuvastamist. Salvestage oma praegune stseen ja minge koostamise seadetele. Lülitage oma platvorm Androidile või IOS -ile ja kui teie IOS -is on kimpude identifikaatoriks midagi lisatud, lisage kaamera ja mikrofoni kasutamise kirjeldus. Kontrollige XR seadete alt Vuforia liitreaalsuse toetust.

Nüüd kustutage stseenis põhikaamera ja lisage Vuforia ARCamera. Minge konfiguratsiooniosasse ja muutke jälgimisrežiim positsiooniliseks. Tühjendage kõik andmebaasid, sest me ei vaja neid.

Nüüd lisage tasapinna leidja ja peame selle vaikekäitumise alistama, kuna soovime põhitasandi etappi juurutada ainult üks kord, nii et leiame Vuforia veebisaidilt skripti Deploy kord. Tooge see skript Unity'i ja pange see lennukileidjale, eemaldades seal olnud vana skripti. Muutke režiim interaktiivseks ja veenduge, et sellel Unity Sündmusel kutsutakse sisse funktsioon "OnInteractiveHitTest". Olles siin, seadistame varem tehtud nupu aktiivseks, kui oleme leidnud tasapinna, seadke selle vaikeseisund mitteaktiivseks. Nüüd pange sündmuspinnale lennuk ja muutke see õhu keskele, sest me tahame, et kõik pildid hõljuksid õhus. Lohistage see tasapind tasapinnaotsija tühja pilusse.

Samm: looge pildi eelmoodul

Looge pildi eelmoodul
Looge pildi eelmoodul

Enne kui hakkame kõiki neid tükke kokku panema, peame looma kokkupandava mänguobjekti, mida saame iga kord pildi laadimisel kohe tuvastada. Nii et looge alusplaadi alla tühi mänguobjekt ja nimetage see "picPrefab". Looge selle lapsena quad ja skaleerige seda 2 -ga, pöörake selle y -d 180 kraadi võrra nii, et vanemate edasiviiv vektor, mis on näidatud sinise noolena, on quad ees.

Looge uus skript nimega "PictureBehavior" ja lisage see meie picPrefab -i.

Nüüd lohistage see piltmoodul oma varade kausta ja see on see, mida me igale pildile paneme.

Meie skript "PictureBehavior" peaks välja nägema selline:

kasutades System. Collections;

kasutades System. Collections. Generic; UnityEngine'i kasutamine; avalik klass PictureBehavior: MonoBehaviour {public Renderer quadRenderer; privaatne Vector3 soovitud positsioon; void Start () {// pilk kaamera transform. LookAt (Camera.main.transform); Vector3 soovitudAngle = uus Vector3 (0, transform.localEulerAngles.y, 0); transform.rotation = Quaternion. Euler (soovitudNurk); // jõuga õhku soovitudPosition = transform.localPosition; transform.localPosition += uus Vector3 (0, 20, 0); } tühine Värskendus () {transform.localPosition = Vector3. Lerp (transform.localPosition, wishPosition, Time.deltaTime * 4f); } public void LoadImage (stringi URL) {StartCoroutine (LoadImageFromURL (url)); } IEnumerator LoadImageFromURL (stringi URL) {WWW www = uus WWW (url); tootlus tootlus www; quadRenderer.material.mainTexture = www.texture; }}

6. toiming: looge Google'i API jaoks skript

Looge Google'i API jaoks skript
Looge Google'i API jaoks skript

Nüüd lohistame viite quad renderdajale meie "picPrefabist".

Meil on veel teha ainult kaks skripti, nii et loome C# skripti nimega GoogleService.cs ja PictureFactroy.cs.

Kleepige teenusesse „GoogleService” see kood, mis esitab meie taotluse:

kasutades System. Collections;

kasutades System. Collections. Generic; UnityEngine'i kasutamine; kasutades UnityEngine. UI; avalik klass GoogleService: MonoBehaviour {public PictureFactory pictureFactory; public Text buttonText; private const string API_KEY = "PANE API VÕTME SIIA !!!!!"; public void GetPictures () {StartCoroutine (PictureRoutine ()); } IEnumerator PictureRoutine () {buttonText.transform.parent.gameObject. SetActive (false); stringipäring = buttonText.text; päring = WWW. EscapeURL (päring + "meemid"); // kustuta vanad pildid pictureFactory. DeleteOldPictures (); // salvesta kaamera edasi vektor, et saaksime objektide paigutamise ajal ringi liikuda Vector3 cameraForward = Camera.main.transform.forward; // saame korraga ainult 10 tulemust, nii et peame kordama ja salvestama oma edusamme, muutes stardinumbrit pärast iga 10 int ridaNum = 1; (int i = 1; i <= 60; i + = 10) {string url = "https://www.googleapis.com/customsearch/v1?q=" + query + "& cx = 011535004225295624669%3Afeb1gwic6bs & filter = 1 & number = 10 & searchType = image & start = " + i +" & fields = items%2Flink & key = " + API_KEY; WWW www = uus WWW (url); tootlus tootlus www; pictureFactory. CreateImages (ParseResponse (www.text), rowNum, cameraForward); rowNum ++; } tootlus tagastab uue WaitForSeconds (5f); buttonText.transform.parent.gameObject. SetActive (tõene); } Loend ParseResponse (stringi tekst) {List urlList = new List (); string URL -id = tekst. Lõhe ('\ n'); foreach (stringirida urlides) {if (line. Contains ("link")) {string url = line. Substring (12, line. Length-13); // filtreerimine png või jpg järgi Google'ilt ei tööta, seega teeme seda siin: if (url. Contains (".jpg") || url. Contains (".png")) {urlList. Add (url); }}} return urlList; }}

Samm: looge meie pilditehas

Looge meie pilditehas
Looge meie pilditehas

Inside PictureFactory.cs paneb selle koodi kõigi meie piltide loomiseks ja laadib nende tekstuurid URL -ist.

kasutades System. Collections;

kasutades System. Collections. Generic; UnityEngine'i kasutamine; avalik klass PictureFactory: MonoBehaviour {public GameObject picPrefab; avalik GoogleService googleService; public void DeleteOldPictures () {if (transform.childCount> 0) {foreach (Teisenda laps selles.transform) {Destroy (child.gameObject); }}} public void CreateImages (ListurlList, int resultNum, Vector3 camForward) {int picNum = 1; Vector3 keskus = Camera.main.transform.position; foreach (stringi URL urlListis) {Vector3 pos = GetPosition (picNum, resultNum, camForward); GameObject pic = Instantiate (picPrefab, pos, Quaternion.identity, this.transform); pic. GetComponent (). LoadImage (url); picNum ++; }} Vector3 GetPosition (int picNum, int rowNum, Vector3 camForward) {Vector3 pos = Vector3.zero; if (picNum <= 5) {pos = camForward + new Vector3 (picNum * -3, 0, rowNum * 3.5f); } else {pos = camForward + uus vektor3 ((picNum % 5) * 3, 0, rowNum * 3.5f); } return pos; }}

8. samm: oleme valmis

Me saime valmis!
Me saime valmis!
Me saime valmis!
Me saime valmis!

Looge tühi mänguobjekt nimega GoogleService ja pange sellele skript "GoogleSerivice".

Lohistage skript "PictureFactory" aluspinnale, sest kõik meie pildid luuakse selle mänguobjekti lastena.

Lohistage inspektorisse vastavad viited, tehke sama Google'i teenusega.

Viimane asi, mida me peaksime tegema, on veenduda, et meie "GetPictures" funktsiooni kutsutakse. Nii et lähme meie nupu sündmusele "onClick" ja helistame sellele sealt.

Nüüd saame klõpsata nuppu Esita ja seda testida. Lülitage kindlasti sisse tasapind ja nupp. Öelge sõna ja klõpsake selle teksti otsimiseks nuppu!

Selle rakenduse telefoni hankimiseks ühendage see ja minge jaotisse Fail-> Koosta seaded. Löö ehitada ja joosta!

Küsimuste korral andke mulle kommentaarides teada!

Soovitan: