Unitatea - crearea de aplicații de realitate virtuală

Produse și tehnologii:

Unitate, C #, realitate virtuală

Articolul ia în considerare:

  • crearea unui UI de bază în realitatea virtuală;
  • conectarea la date externe în aplicația de realitate virtuală;
  • conectarea la datele de obiect joc în Unity.

Realitatea virtuală (VR) oferă nu numai oportunități unice dezvoltatorilor, ci și le confruntă cu sarcini dificile. Pe de o parte, este posibil să se realizeze o imersiune în VR care nu are legătură cu paradigma existentă a interfețelor UD bidimensionale. Pe de altă parte, există problema creării unui VR impresionant, care este ceva mai mult decât o simplă reprezentare tridimensională a unui ecran bidimensional. Din fericire, unele dintre elementele fundamentale ale dezvoltării aplicațiilor și designului UI sunt similare, de exemplu, crearea unei vizualizări principale / detaliate, obținerea de informații de la utilizator și comunicarea între aplicații prin intermediul serviciilor. În acest articol, analizez aceste domenii în contextul creării unei aplicații de afaceri virtuale virtuale, astfel încât să înțelegeți cum să începeți să vă dezvoltați propriile aplicații VR.







De ce VR?

Acum este momentul să începem să dezvoltăm aplicații VR din cauza apariției unor instrumente excelente precum Unitatea și o piață VR relativ mică.

Crearea de aplicații pentru astfel de dispozitive VR precum Samsung Gear VR și Google Cardboard reprezintă un bun punct de plecare pentru dezvoltatorii care încep să-și pregătească conținutul pentru canalele de distribuție a produselor bugetare. Când se dezvoltă în termeni de realitate mixtă, aplicațiile VR pot fi portate la HoloLens, deoarece setul de instrumente este același și conținutul poate fi, de asemenea, același. Singura diferență este codul care efectuează sarcinile (de exemplu, Gaze sau Raycast, despre care vom discuta mai târziu în acest articol) și utilizarea unor funcții HoloLens unice, cum ar fi vorbirea, maparea spațială (cartografiere mapată) și gesturi. Un pic de cercetare și experimente, și veți putea converti aplicația dvs. VR în aplicația HoloLens.

Nu voi intra în detalii excesive privind pregătirea proiectului VR. În schimb, vă sfătuiesc să studiați proiectul Unity VR Samples în Unitatea Asset Store (bit.ly/1qYLBX9). Voi crea proiectul din acest articol din nou, dar voi folosi scripturile din proiectul Unity VR Samples pentru a folosi codul existent pentru sarcinile standard (de exemplu, pentru a face un obiect interactiv). Vă recomandăm să creați un proiect Unity gol și să importați Exemple Unity VR pentru referință în afara proiectului creat în acest articol. Unitatea VR Probele are o mulțime de conținut excelent, dar este construită ca o aplicație autonomă și necesită o configurație suplimentară pentru a efectua scena în afara scenelor incluse. Păstrați exemplele Unity VR deschise și accesibile, deoarece acestea au mai multe scripturi care vor fi necesare în proiectul meu. Pentru acest articol, voi folosi unitatea 5.3 cu suport pentru instrumente Android pentru a putea crea o aplicație pentru dispozitivul Samsung Gear VR.

Contoso Travel System

Să începem

Apoi, actualizați Setările Playerului pentru VR mobil. Pentru aceasta, deschideți Edit | Setările proiectului | Player și selectați secțiunea Alte setări. În această secțiune, există parametrul Virtual Reality Supported. Bifați caseta din dreptul acesteia, astfel încât lumea să fie recunoscută ca aplicație VR. Datorită acestui lucru, obiectul principal de cameră deja existent în Unity va fi automat convertit într-o cameră VR.

Pentru călătorii în interes de afaceri, VR poate da o idee preliminară despre biroul spre care se îndreaptă sau despre locurile care trebuie privite.

Acum, după configurarea aplicației, pregătiți scena. În fereastra Ierarhii, adăugați un cub cu o scară de x = 10, y = 0,1 și z = 10. Resetați poziția cubului pentru al centra pe coordonatele x = 0, y = 0 și z = 0 ca un cub aplatizat în lume. Datorită acestui fapt, veți avea un zid de fund pentru lume, care va oferi utilizatorilor un sentiment de spațiu și teren, precum și un loc pentru entitățile din această lume unde vor fi localizate. Ca și în aplicațiile 2D, trebuie să vă asigurați că utilizatorul înțelege unde va apărea conținutul și va interacționa cu acesta. Acest lucru îi ajută pe utilizatori să navigheze în aplicație. În cazul ContosoTravel, toate acțiunile vor avea loc în limitele acestui obiect al pereților lumii.

În această lume, veți avea nevoie de un obiect care să marcheze datele prin intermediul aplicației. Creați un Obiect gol în fereastra Ierarhie și redenumiți acest obiect în TravelerManager. Acesta va fi sursa tuturor datelor despre călătorii din aplicație. După evidențierea obiectului de joc TravelerManager, faceți clic pe Adăugare componentă | Script nou. Denumiți scriptul TravelerManager și faceți clic pe Creare și adăugare. Acest lucru va crea un script nou pentru procesarea logicii TravelerManager.

Aplicația de gestionare a călătoriilor ar trebui să vadă toți călătorii de afaceri din organizație. Pentru a face acest lucru, adăugați un nou obiect de joc (Obiect de joc) la ierarhia (Ierarhia) și denumiți TravelerTemplate. Acesta va fi obiectul afișat pentru fiecare persoană călătoră prezentată în sistem. Dacă sunteți familiarizat cu prefabricate, utilizați un personaj proiectat de dvs. sau luați ceva din Magazinul de bunuri. Pentru cererea mea, voi folosi caractere low-poly, găsite în Magazinul de bunuri, oferind lumii un aspect amuzant. Pentru TravelerTemplate este potrivit orice obiect de joc - gol, cub, sferă etc. După ce ați adăugat TravelerTemplate, dezactivați acest obiect de joc făcând clic pe caseta de selectare de lângă numele obiectului de joc din fereastra Inspector. După aceasta, TravelerTemplate va dispărea de pe ecran.







În final, adăugați următoarele proiecte din proiectul Unity VR Samples la proiectul dvs.: VREyeRaycast, VRInput, VRInteractiveItem și Reticle. Scopul specific al acestor scripturi va fi discutat când le folosesc mai târziu în acest articol, dar mi-au salvat o mulțime de lucruri.

Pregătirea clasei TravelerManager

În Unitate, faceți dublu clic pe scriptul TravelerManager pentru al deschide în MonoDevelop sau Visual Studio. Adăugați codul în Fig. 1.

Fig. 1. Componenta Script TravelerManager

În GetTravelers, obiectul WWW de la Unity este folosit pentru a vă conecta la adresa URL furnizată. Când utilizați cuvântul cheie de randament, obiectul WWW este returnat până când este completat prin verificarea proprietății isDone. Odată ce adresa URL este încărcată, proprietatea isDone este adevărată, după care textul returnat prin apelul API este transmis metodei DisplayTravelers. Un obiect WWW poate fi folosit pentru a trimite și a primi date asincron, astfel încât în ​​viitor aplicația să aibă funcționalitatea de a adăuga obiecte ale angajaților detașați. Pentru documentația completă pe site-ul WWW, consultați site-ul Web Unity la bit.ly/2alFoML.

Apoi luați rezultatul din API și îl convertiți în ceva pe care utilizatorul îl poate vedea în aplicație. Înainte de a afișa călătorii de afaceri în diferite locuri de pe hartă, trebuie să creați aceste locuri în lume. Reveniți la designerul Unity și creați un obiect de joc gol în rădăcina arborelui Ierarhiei. Denumiți acest obiect gol pentru obiectul Obiect de locație. Setați poziția containerului de locație ca X = 0, Y = 0, Z = 0 (în centrul lumii). Cu containerul de locație selectat, creați mai multe obiecte de joc copii goale împrăștiate pe partea inferioară a cubului creat anterior. Aceste obiecte de joc goale reprezintă aeroporturile, iar partea de jos a cubului este similară cu harta. În metoda DisplayTravelers căutați un oraș de destinație pentru un călător de afaceri și asociați-l cu unul dintre aceste obiecte de joc goale. Redenumiți obiectele jocului gol la numele oricărui aeroport. Am folosit BWI, MSP și SFO. Pentru a termina cu aeroporturile, creați o etichetă pentru obiectele de joc numite Airport - apoi puteți găsi toate aeroporturile cu valoarea unei etichete. Pentru a crea o etichetă, mergeți la stânga sus a inspectorului pentru obiect, dați clic pe lista derulantă și selectați Etichetă nouă. Puteți crea o nouă etichetă în versiune când toate obiectele de joc goale sunt selectate, ceea ce vă va permite să setați o etichetă pentru toate aceste obiecte simultan.

După metoda getTravelers, adăugați codul prezentat în Fig. 2.

Fig. 2. Conversia obiectelor JSON Traveler la obiectele de jocuri Unity

Folosind scriptul gratuit JSONObject din Unity Asset Store (bit.ly/2akN9p9), poți converti textul JSON în obiectul C # -Type Traveler. Apoi, utilizând metoda Instantiate, creați o copie a TravelerTemplate, atribuiți coordonatele implicite și dați obiectului joc numele călătorului. Acest nume va fi necesar în aplicație în viitor, deoarece va fi folosit pentru identificarea călătorului din listă. În continuare, veți găsi toate obiectele de joc marcate cu eticheta aeroportului. Acest lucru vă oferă un set de obiecte ale Aeroportului pe care le puteți parcurge și găsi un obiect adecvat după nume pentru a pune călătorul pe aeroportul corespunzător. Utilizând etichetele pregătite anterior, veți găsi cu ușurință obiectele de joc dorite Aeroport. La sfârșitul metodei, adăugați un obiect călător la TravelerList, astfel încât să puteți face referire la datele despre acest călător. Deci, aveți o listă de bază a călătorilor de afaceri expuse în lumea voastră. Acum este momentul să permiteți utilizatorilor să aleagă un călător, astfel încât să puteți afișa informații detaliate despre acest angajat.

Selectarea obiectului angajatului detașat

În VR, alegerea unui angajat detașat se realizează prin examinarea obiectului. Pentru a afla dacă utilizatorul se uită la un angajat călător, trebuie să utilizați obiectul Raycast. Raycast este o rază invizibilă care emană din cameră și permite sistemului să detecteze când un obiect cu o componentă de coliziune îl intersectează în fascicul. Utilizând Raycast, codul dvs. poate recunoaște când un utilizator se uită la un obiect care trebuie să reacționeze la acesta. Anterior, ați importat un script VREyeRaycast, care implementează toată logica necesară pentru a crea Raycast în cameră. Adăugați scriptul VREyeRaycast la Camera principală. De asemenea, va trebui să adăugați scriptul Reticle la această cameră pentru a furniza o componentă UI care arată unde se află utilizatorul.

Utilizând Raycast, codul dvs. poate recunoaște când un utilizator se uită la un obiect care trebuie să reacționeze la acesta.

Plasând Raycast în cameră trebuie să actualizați TravelerTemplate pentru a ști cum să răspundeți la intersecția cu Raycast. Pentru a face acest lucru, adăugați scriptul VRInteractiveItem la TravelerTemplate. Acest script oferă o configurare rapidă pentru lucrul cu evenimentele generate atunci când Raycast intersectează un obiect, lasă obiectul sau chiar captează un eveniment clic.

Apoi, creați un script numit TravelerInteraction, care implementează evenimentele din scriptul VRInteractiveItem. Pentru această aplicație, veți utiliza evenimentele OnOver, OnOut și OnClick. Atunci când un utilizator se uită la obiectul Traveler, acesta își va schimba aspectul și atunci când utilizatorul se va îndepărta de el, aspectul acestui obiect va fi restabilit. Dacă utilizatorul examinează obiectul Traveler și face un clic, apare o fereastră de dialog care arată numele angajatului detașat, poziția și destinația acestuia. Aici este scriptul TravelerInteraction:

În acest bloc de cod, mai întâi determinați dacă este afișat dialogul. Dacă da, deconectați dialogul pentru al ascunde. Nu - preluați obiectul text și atribuiți valoarea acestuia numele și destinația Călătorului. Când ați creat inițial un obiect Traveler, ați specificat numele angajatului detașat ca fiind numele obiectului de joc care reprezintă acest angajat. Cu LINQ, puteți căuta pe lista călătorilor de afaceri cu acest nume pentru a obține informații detaliate despre acest angajat. Din motive de simplitate, numele călătorului a fost implicat, dar în sistemele mai mari și mai complexe este mult mai bine să se utilizeze identificatorul unic al fiecărui călător. În ceea ce privește LINQ-ul, rețineți că performanța este principalul lucru într-o aplicație VR mobilă. LINQ este capabil să facă multe, dar la un cost avantajos, deci ai grijă când folosești LINQ și aplici-o numai acolo unde nu poți să faci fără ea și nu doar pentru confort. Aici LINQ este folosit pentru codul scurt.

concluzie

Îmi exprim recunoștința pentru revizuirea articolului către expertul Microsoft Adam Tuliper (Adam Tuliper).







Articole similare

Trimiteți-le prietenilor: