– să se realizeze o aplicație cu componente de grafică interactivă, care să îndeplinească următoarele specificații: – să utilizeze realitatea… [301979]

[anonimizat] o [anonimizat]:

– să utilizeze realitatea augumentată pentru integrarea mediului real cu obiecte virtuale generate de către aplicație;

– [anonimizat], acesta fiind baza orientării sale în spațiul realității augumentate;

– să ofere funcționalitate de tip joc în care se va demonstra interacțiunea celor două medii.

CUPRINS

Capitolul 1 – Introducere

Istoria informaticii

Știința informaticii este studiul proceselor care interacționează cu datele și care pot fi reprezentate ca date sub formă de programe. [anonimizat].

[anonimizat]. [anonimizat] a sistemelor complexe. [anonimizat] i-a în considerare provocările de a [anonimizat].

Wilhelm Schickard a proiectat și construit primul calculator mecanic de lucru în 1623. În 1673, Gottfried Leibniz a [anonimizat]. Poate fi considerat primul om de știință în domeniul informaticii care a prezentat, [anonimizat].

În 1820, Thomas de Colmar a lansat industria calculatoarelor mecanice când a [anonimizat] a fost prima mașină de calcul suficient de puternică și suficient de fiabilă pentru a [anonimizat].

Charles Babbage a început proiectarea primului calculator automat mecanic „Difference Engine” în 1822 care, i-a [anonimizat]. El a început să dezvolte această mașină în 1834 și "[anonimizat] a schițat multe dintre caracteristicile esențiale ale calculatorului modern". "Un pas esențial a fost adoptarea unui sistem de carduri perforate derivat din țesătura Jacquard", făcând-o programabilă infinit.

În 1843, [anonimizat] a scris una dintre numeroasele note pe care le-a inclus, [anonimizat] a fi primul algoritm publicat vreodată specific adaptat pentru implementarea pe un calculator.

În jurul anului 1885, Herman Hollerith a [anonimizat] a folosit cărți perforate pentru a [anonimizat], compania sa a devenit parte a IBM.

Primul program de informatică din lume, “Diploma Cambridge în Informatică“, a început la Universitatea din Cambridge Computer Laboratory în 1953. Primul departament de informatică din Statele Unite a fost format la Universitatea Purdue în 1962. [anonimizat].

[anonimizat], la sfârșitul anilor `50, a devenit treptat acceptată în rândul populației academice. [anonimizat] a făcut parte din revoluția informatică în această perioadă. IBM (scurt pentru International Business Machines) a lansat computerele IBM 704 și mai târziu IBM 709, care au fost utilizate pe scară largă în timpul perioadei de explorare a unor astfel de dispozitive.

Etimologia termenului "informatică"

Deși inițial a fost propus în 1956, termenul "informatică" apare într-un articol din 1959 din Communications of the ACM, în care, Louis Fein argumentează crearea unei Școli Postuniversitare în Știința Calculatoarelor analogă creării Harvard Business School în 1921, justificând numele argumentând că, asemenea științei managementului, subiectul este aplicat și interdisciplinar în natură, având în același timp caracteristicile unei discipline academice.

Știința informaticii este considerată de unii ca având o relație mult mai strânsă cu matematica față de multe alte discipline științifice, iar câțiva observatori spun că, calculul este o știință matematică. Informatica timpurie a fost puternic influențată de munca matematicienilor precum Kurt Gödel, Alan Turing, Rózsa Péter și Alonzo Church și continuă să existe un schimb util de idei între cele două, în domenii precum logica matematică, teoria categoriilor, teoria domeniilor și algebra. Relația dintre informatică și ingineria software-ului este o problemă controversată, care este în continuare studiată de disputele asupra termenului "Engineering Software" și a modului în care este definită știința calculatoarelor.

Istoria ingineriei software

Istoria științei informaticii, a ingineriei software și a World Wide Web este bogată, fascinantă și destul de surprinzătoare. Începe într-un moment în care programele de calculator erau, în esență, doar instrucțiuni pentru manipularea unui dispozitiv fizic și trece prin mai multe puncte de cotitură care au condus, în primul rând, la comercializare și în final, la consumarea tehnologiei de calcul.

Hardware și primii ingineri de software

Primul limbaj de programare folosit a fost – Fortranul IBM – care a fost lansat în 1957 pentru calcul matematic și științific. Cobol, a fost lansat de Departamentul Apărării al SUA în 1962 pentru a fi folosit în aplicații de afaceri.

La începutul anilor '70 și-au făcut apariția noi idei cheie în gândirea sistemelor, care le-au permis inginerilor să spargă aceste proiecte gigantice în piese modulare (și mult mai ușor de gestionat) care comunicau prin interfețe. Mai concret, a permis dezvoltatorilor să creeze și să interacționeze cu obiectele aproape fizice ale interfeței grafice (GUI), cum ar fi meniurile, icoanele și ferestrele – "programare orientată pe obiecte".

Deceniile care au trecut au fost marcate de creșteri uluitoare ale puterii de calcul (după Legea lui Moore):

Figura 1.1 – Legea lui Moore

Source: "Transistor Count and Moore's Law – 2011" by Wgsimon – Own work. Licensed under CC BY-SA 3.0 via Wikimedia Commons.

Această nouă putere de calcul nu a fost în întregime benefică pentru starea industriei, unde înainte, inginerii trebuiau să fie foarte atenți la proiectarea unor programe eficiente care să poată funcționa cu memoria limitată și puterea de procesare limitată a zilei. Dependența de puterea brută a condus la câțiva pași înapoi în calitatea codului scris. Acest lucru a determinat pe unii cercetători să denatureze creșterea software-ului "risipitor".

Figura 1.2 – “History of computer science “ Source: World Science Festival

Capitolul 2 – Realitatea virtuală și augmentată (VR/AR)

2.1 Introducere

Unity este platformă de top în dezvoltarea experiențelor realității mixte pentru că oferă un canal foarte generos pentru lucrul cu aseturi 3D. Aceasta ne învață să integrăm, să animăm și să suprapunem obiecte 3D pe cameră, înainte de a trece la implementatea aplicațiilor AR bazate pe senzori.

Învățăm să explorăm diverse concepte prin crearea de aplicații AR utilizând Vuforia atât pentru macOs cât și pentru dispozitivele Android și iOS. De asemenea putem explora diverse utilități pentru dezvoltarea VR: intrări controlate manual versus control vizual, pânze-tablou UI “world space”, teleportare, animația și rețele multiplayer.

Realitatea virtuală (VR) se referă la simularea 3D, realistă și imersivă, a unui mediu. Această simulare este generată cu ajutorul software-ului și hardware-ului interactiv și este controlată de vocea, gesturile, privirea sau mișcările corpului utilizatorului. Predecesorele sistemelor VR actuale se numeau stereoscoape și au fost inventate în sec al XIX-lea de către Sir Charles Wheatstone, David Brewster și Oliver Wendell Holmes. La începutul secolului al XX-lea, ideile lor au fost extinse de către Sawyer Service Inc. pentru a dezvolta View-Master (http://bit.ly/viewmaster_sawyer).

Nintendo a făcut progrese semnificative în VR prin introducerea consolei de jocuri VR-enabled Virtual Boy în 1995. Virtual Boy a venit echipat cu un system de control și vizualizare care, ca și stereoscoapele și View-Master, generau o pereche stereo de imagini. Aceste imagini, numite stereopair, creau iluzia de profunzime a imaginii 3D. În 1989, o companie numită VPL Research a mers chiar mai departe și a dezvoltat o cască VR ca parte a unui costum întreg care conținea senzori de măsurare a mișcărilor corpului. Deși aceste dispozitive VR nu au avut succes comercial, ele sunt precursorii căștilor VR moderne.

Stereoscopia oferă două imagini bidimensionale ale aceluiași mediu. Aceste imagini diferă ușor una de cealaltă și sunt prezentate independent pentru ochiul drept și pentru cel stâng. Creierul combină imaginile pentru a da senzația de adâncime/ profunzime într-un plan 2D și pentru a crea scena virtuală 3D. Cel mai simplu mod de a percepe acest efect este să ținem degetul mare de la mana la cativa centimetri de față în dreptul ochilor și să clipim alternativ cu ochiul drept și cu cel stâng.

Observăm cum poziția degetului pare a fi diferită pentru ochiul drept față de cel stâng, poziția corectă restabilindu-se atunci când deschidem ambii ochi. Așa funcționează stereoscopia.

2.2 Ce este realitatea virtuală

Astăzi suntem martorii dezvoltării rapide a consumatorului de realitate virtuala, o tehnologie interesantă care promite să transformăm într-un mod fundamental modul în care interacționăm cu informațiile, prietenii noștri și lumea în general.

Ce este Realitatea Virtuală? În linii mari, VR este simularea generată de calculator a unui mediu 3D, care pare foarte real pentru persoana care o experimentează, utilizând echipamente electronice speciale. Obiectivul este acela de a obține un sentiment puternic de a fi prezent în mediul virtual.

Tehnologia VR a consumatorilor de astăzi implică purtarea unei caști HMD (ochelari-ecran montați pe cap) pentru a vedea scene 3D stereoscopice. Poți privi în jur prin mișcarea capului și te poți deplasa utilizând comenzi manuale sau senzori de mișcare. Ești prins într-o experiență complet imersivă, care te transpune într-o altă lume virtuală.

Figura 2.1 – Rift Development Kit 2 (DK2) în 2015

Realitatea virtuală nu este nouă, a fost aici de zeci de ani, chiar dacă ascunsă în laboratoarele de cercetare academică și în instalațiile industriale și militare de ultimă generație.

Ivan Sutherland a inventat primul HMD în 1965 (a se vedea https: // amturing.acm.org / photo / sut he r land_3467412.cfm).

În trecut, s-au făcut mai multe încercări eșuate de a aduce pe piață produse de realitate virtuală VR la un nivel accesibil consumatorului obișnuit.

În 2010, Palmer Luckey, fondatorul companiei Oculus VR LLC, a făcut o demonstrație a unui display VR improvizat lui John Carmack, cunoscutul dezvoltator al jocurilor video Doom, Wolfenstein 3D și a jocurilor video Quake.

Împreună, au susținut o campanie Kickstarter de succes și au lansat un kit de dezvoltare numit Oculus Rift Development Kit 1 (DK1) pentru o comunitate entuziastă. Acest lucru a atras atenția investitorilor, precum și a lui Mark Zuckerberg, iar în martie 2014, Facebook a cumpărat compania pentru 2 miliarde de dolari.

Actuala generație de software 3D, care a generat o mulțime jocuri, poate fi de asemenea folosită pentru a construi aplicații VR non-game. Deși VR găsește cei mai mulți entuziaști în comunitatea de jocuri, potențialul aplicațiilor depașește cu mult acest nivel. Orice afacere care utilizează în prezent modele 3D și grafică pe calculator va fi mai eficientă dacă utilizează tehnologia VR.

Sensul prezenței imersive oferit de VR poate îmbunătăți astăzi experiențele online comune, care includ ingineria, rețelele sociale, marketingul, divertismentul și dezvoltarea afacerilor. În viitorul apropiat, vizionarea site-urilor 3D cu setul cu cască VR poate fi la fel de obișnuită precum vizitarea site-urilor obișnuite plate de astăzi.

2.3 Tipuri de afișare / display-uri montate pe cap

În prezent, există două categorii de bază ale HMD-urilor pentru realitatea virtuală – desktop VR și VR mobile, deși deosebirile dintre ele se estompeaza din ce in ce mai mult.

2.4 Desktop VR

Cu desktop-ul VR (și consola VR), setul cu cască este un periferic pentru computerul mai puternic, care procesează grafica mai complexă. Computerul poate fi un PC cu Windows, Mac, Linux sau o consolă de jocuri, cu toate că Windows este de departe cel mai remarcabil PC, iar PS4 este un bestseller în ceea ce privește consola VR.

Casca este conectat la calculator prin cablu de conexiune, jocul rulează pe PC, iar HMD este un dispozitiv de afișare periferic cu un input sensibil la mișcării.

Dispozitivele desktop VR se bazeaza pe un computer desktop (de obicei prin cabluri video și USB) pentru CPU și unitatea de procesare grafica (GPU), unde, mai mult este mai bine.

2.5 VR mobil

VR Mobile își are originea din Google Cardboard (https: //vr google. com/cardboard/), o carcasă simplă cu 2 lentile și o mufa pentru telefonul mobil. Ecranul telefonului este utilizat pentru a afișa cele doua imagini identice stereoscopice. Cardboard-ul oferă utilizatorului posibilitatea de a face click sau de a tasta pe o latura pentru a face selecții într-un joc. Complexitatea imaginilor este limitată deoarece foloseste procesorul telefonului pentru redarea imaginilor pe ecranul telefonului.

Google Daydream și Samsung GearVR au îmbunătățit platformele, cerând un minim de specificații, inclusiv o putere de procesare mai mare a telefonului mobil. Căștile GearVR includ senzori de mișcare pentru a ajuta dispozitivul telefonului. Aceste dispozitive au introdus, de asemenea, un controler manual cu trei grade de libertate (DOF) care poate fi utilizat ca un pointer cu laser în cadrul experiențelor VR.

Următoarea generație de dispozitive mobile VR include setul cu cască all-in-one, cum ar fi Oculus Go, cu ecrane și procesoare încorporate, eliminând nevoia unui telefon mobil separat. Modelele mai noi pot include senzori de profunzime și procesoare de mapare spațială pentru a urmări locația utilizatorului în spațiul 3D. Cele mai recente inovații din AR sunt căștile AR portabile, cum ar fi HoloLens și Magic Leap ale Microsoft, care prezintă grafica computerului direct în câmpul vizual. Grafica nu este amestecată într-o imagine video. În cazul în care căștile VR sunt ca ochelarii “de protectie”, căștile AR sunt ca ochelarii “de soare”, transparenți care combină razele de lumină din lumea reală cu CGI (Common Gateway Interface).

AR promite la fel de mult ca VR pentru aplicațiile viitoare. Deși AR intenționează să îl prindă pe utilizator în mediul actual, realitatea virtuală este pe deplin imersivă. În AR, poți deschide mâna și să vezi acolo o cabană de lemn însă în VR, ești transportat direct în interiorul cabanei și te poți plimba în interiorul acesteia.

De asemenea, începem să vedem dispozitive hibride care combină caracteristicile VR cu cele AR având posibilitatea de a comuta între cele două moduri.

Capitolul 3 – Platforma de realitate augmentată ARCore

3.1 Realitatea expusă/ amplificată și ARCore

Realitatea Amplificata (AR) este o altfel de tehnologie aparută recent.

Aplicațiile realității augmentate sunt unice prin faptul că adnotă sau amplifică realitatea utilizatorului. Acest lucru se realizează, de obicei vizual, prin faptul că aplicația AR acoperă o imagine a lumii reale cu grafică pe calculator. ARCore este conceput în primul rând pentru furnizarea acestui tip de adnotare vizuală pentru utilizator.

În general, AR utilizează elemente digitale precum sunet și imagini generate de un computer pentru a amplifica sistemul de percepție umană. Cel mai captivant aspect al AR este capacitatea lui de a suprapune elemente artificiale tridimensionale peste obiectele reale. AR mai poate fi folosită într-o măsură mai mare pentru a crea o interacțiuni între obiecte reale și virtuale.

De exemplu, cu ajutorul camerelor inteligente adiționale, poți “atinge” obiecte artificiale și le poti manipula cu mâinile sau prin gesturi făcute in aer. AR a devenit foarte cunoscută după remarcabilul success al jocului AR, Pokemon GO, care a fost precedat de Niantic Ingress. Aceste jocuri i-au inspirat pe fabricanții de dispozitive mobile să creeze mai multe kit-uri de programare pentru a grăbi dezvoltarea AR.

Deși telefoanele mobile moderne sunt echipate cu procesoare puternice și diverși senzori inertiali, ele nu reprezinta intregul potential al AR deoarece acestea sunt foarte rar echipate cu senzori pentru a înțelege mediul înconjurător și care simt precis distanța telefonului față de diferite obiecte reale din scenă.

Mai mult, ecranele telefoanelor obișnuite nu pot genera obiecte 3D stereoscopice fără a utiliza un hardware suplimentar (precum Cardboard). In schimb, dispozitivele mobile suprapun elemente digitale peste obiecte reale capturate de aparatul de fotografiat. Apoi, ambele obiecte artificiale și reale sunt afișate pe același ecran. Cu alte cuvinte, dispozitivele mobile ofera o modalitate relativ rapidă de a îmbina obiectele reale cu cele artificiale, însă experiența AR este limitată.

Microsoft HoloLens are o cu totul altă abordare. El utilizează un modul A fixat pe cap care creeaza imagini 3D stereoscopice ale obiectelor artificiale, care sunt proiectate direct pe decorul real. Deoarece HoloLens nu folosește un ecran opac, obiectele reale și cele artificiale “traiesc” în același mediu. Mai mult, HoloLens este echipat cu camere digitale și senzori care examinează mediul ambiant.

Acest lucru permite HoloLens să înteleagă decorul în care te afli, permitând obiectelor reale să blocheze și să interactioneze cu cele virtuale. HoloLens poate recunoaste de asemenea gesturile mâinii și vocea utilizatorului, și poate genera un sunet stereoscopic pentru a oferi cea mai bună experiență AR posibilă.

Un exemplu de aplicație demo

Figura 3.1 – Google ARcore aplicație de demonstrație

Imaginea de ecran este chiar mai impresionantă atunci când realizezi faptul că a fost redată în timp real pe un dispozitiv mobil. Nu este rezultatul unor ore minuțioase de folosire a Photoshop-ului sau a altor librării de efecte media.

Ceea ce se vede în imagine este o întreagă suprapunere a unui obiect virtual, leul, în realitatea utilizatorului. Mai impresionantă este calitatea imersiunii.

Observăm detaliile, cum ar fi luminile și umbrele leului, umbrele de pe jos și modul în care obiectul își menține poziția în realitate, chiar dacă, el nu este cu adevărat acolo. Fără aceste îmbunătățiri vizuale, tot ce s-ar vedea este un leu plutitor suprapus pe ecran. Sunt acele detalii vizuale care oferă imersia.

Google a dezvoltat ARCore ca o modalitate de al ajuta pe utilizator să integreze acele îmbunătățiri vizuale în construirea aplicațiilor AR.

3.2 Virtualitatea Continuă

VR (RealitateVirtuală) și AR (Realitate Amplificată) sunt strâns legate de conceptul de virtualitate continuă, care a fost prezentat într-o lucrare de Paul Milgram și Fumio Kishino (vezi figura 3.2 și 3.3).

Figura 3.2 – Realitate Mixtă

Figura 3.3 – Diferitele aspecte ale distingerii realității de virtualizare; Obiect Real vs Virtual; vizualizare directă și non-directă; Imagine reală vs virtuală.

Ne putem gândi la virtualitatea continuă ca la un spectru de medii reale și virtuale. Mediul real (MR) este compus numai din obiecte reale. Mediul virtual (MV) conține numai elemente create digital.

Așa cum se arată în Figura 3.2, RV este mai aproape de extrema MV, deși nu este în totalitate acolo. Aceasta se datorează faptului că RV se bazează în primul rând pe elemente digitale însă nu este un mediu virtual complet, având nevoie de elemente reale (cum sunt mișcările mâinii și trupului) pentru a controla simularea. Prin contrast, AR este mai aproape de extrema MR pentru că AR amestecă obiectele create digital cu realitatea. În AR, obiectele artificiale sunt proiectate în mediul real, iar utilizatorul poate atât să interacționeze cu obiectele artificiale cât și să le blocheze pe cele reale.

Pachete AR disponibile

Unity3D are câteva opțiuni disponibile prin conectare pentru a crea aplicații și jocuri:

Vuforia AR Starter Kit

ARCore (Tango)

ARToolKit

ARKit

Trebuie menționat faptul că Vuforia Starter Kit a fost total integrat în Unity3D și este destul de simplu să treci direct la crearea de proiecte cu ARKit și ARCore, cu toate acestea sunt ușor diferite. Deoarece sunt încă în fază experimentală și prima fază de dezvoltare, Apple și Google nu au lansat SKD-uri complete și specifice pentru Unity Technologies pentru a fi încorporate în motor. Există un plugin pentru ambele, pe care v a trebui să îl compilăm pentru ca acesta să funcționeze împreună cu proiectul nostru pe dispozitive Apple și Android. Este bine de știut faptul că este nevoie de ceva mai mult de configurat pentru a face AR să funcționeze cu iOS și Android.

Odată introducerea făcută, putem să începem o adevărată discuție despre AR;

ce este AR mai precis și cum setăm Unity3D pentru a beneficia de SDK-urile disponibile pentru a crea propriile jocuri și aplicații AR.

Definirea AR

AR este realitate amplificată. Realitate amplificată înseamnă să iei ceva din realitate și să-l modifici într-un mod specific pentru a amplifica experiența.

Realitatea amplificată se referă la:

Sunet

Figura 3.4 – Percepția sunetului

2. Video

Figura 3.5 – Prezentăm aici doar acoperirea prin percepția video

3. Grafică

Figura 3.6 – Prezentăm aici doar acoperirea prin percepția grafică

4. Tactil

Figura 3.7 – Percepția prin pipăire

5. Datele GPS

Figura 3.8 – Perceptia prin GPS

Percepția GPS

Aceastea înseamnă că putem amplifica grafica vizuală a unui obiect și să-l observăm dintr-o altă perspectivă față de cum suntem obisnuiți să o facem, sau putem adăuga ceva ce nu este acolo.

Cu partea video este puțin diferit, deoarece este necesar ca software-ul să interfereze cu hardware-ul specializat, cum sunt ochelarii, telefoanele celulare, HUD-urile și alte dispozitive. Putem amplifica aspectul auditiv care vine din jurul nostru. Am putea lua cuvinte pe care le vedem într-o singură limbă și să rostim aceste cuvinte într-o alta, sau putem alege acele sunete slabe pe care le auzim mereu și pe care nu le luăm în seama, să le amplificăm și să le aducem astfel în primplan.

Percepția tactilă este ceva mai diferită, însă se poate realiza cu senzori care imită atingerea. Putem face ca ceva să vibreze ușor sau puternic pentru a simula diverse efecte, sau putem face jocul sau aplicația să se bazeze în întregime pe senzori de atingere sau mișcare.

Există multe lucruri pe care le putem folosi pentru percepția tactilă în aplicații sau jocuri. Este un domeniu în care se cercetează constant și care se extinde mereu. Pentru datele GPS, putem folosi locația utilizatorului pentru a ști unde se află în lumea jocurilor sau în aplicații.

O alta utilizare a datelor GPS ar fi să știm dacă ceva de interes pentru utilizator ar putea să-i fie prezentat. Deoarece Unity3D adoră să aibă grijă de majoritatea detaliilor de implementare, nu trebuie să ne ingrijorăm de încorporarea DLL-urilor (librării cu legături dinamice) sau scrierea de clase wrapper pentru a funcționa cu majoritatea dispozitivelor AR sau VR.

Există și excepții de la această regulă, depinzând de platformă și de faptul că motorul a fost actualizat pentru a lucra în mod specific cu aceste dispozitive. Android și iOS sunt cele mai populare dispozitive pentru aplicații și jocuri, având AR încorporat, totuși, marii producători ai tehnologiei s-au străduit din greu să adauge din ce în ce mai multe dispozitive în acest agregaj.

O privire rapidă asupra câtorva dispozitive AR capabile, ar trebui să ne ofere o idee mai bună despre diversele tipuri de dispozitive pe care le putem utiliza și instala:

Meta 2 este un display montat pe cap care utilizează o serie de senzori pentru interacțiunea cu mâna și de urmărire pozițională, are un câmp visual de 90 de grade și o rezoluție de 2560 x 1440:

Figura 3.9 – Meta 2

Afisarile AR pot fi redate pe dispozitive care imită ochelarii de vedere, cum sunt Google Glass:

Figura 3.10 – Ochelarii Google

• Un alt astfel de dispozitiv este HoloLens:

Figura 3.11 – HoloLens

Există ceva numit afișaj head-up, care este denumit în mod curent un HUD. Este o implementare alternativă a ecranelor AR:

Figura 3.12 – HUD

ARCore și ARKit sunt fundamental foarte asemănătoare, însă nu se poate compila ARKit pe un mediu Windows, care se foloseste în prezent. Nu este îngrijorator când ajungem la ARKit, vom folosi un macOS pentru o imagine corespunzătoare și pentru a cunoaște cum să îl folosim.

ARCore a fost creat de Google și este acum în etapele de early preview; deci mai sunt de făcut multe modificări, unele dintre ele putând fi extrem de nocive aplicațiilor și jocurilor existente.

Există două moduri de a obține SDK preview pentru Unity:

Printr-un fișier Unity Package

(https://developers.google.com/ar/develop/unity/guickstart-android)

Prin GitHub

(https://github. com/google-ar/arcore-unity-sdk).

3.3 ARCore pe Android

Google a dezvoltat ARCore pentru Android drept o modalitate de a concura cu ARKit pentru iOS lansat de Apple. Faptul că doi giganți de tehnologie se luptă pentru poziția în AR indică împingerea pentru a construi noi și inovatoare aplicații imersive.

ARCore își are originea în Tango, care este/ a fost un set de instrumente AR mai avansate care utiliza senzori speciali încorporați în dispozitiv. Pentru a face AR mai accesibil și mai de actualitate, Google a dezvoltat ARCore ca un set de instrumente AR destinat dispozitivelor Android care nu sunt echipate cu senzori speciali.

În vreme ce Tango depinde de senzori speciali, ARCore folosește software pentru a încerca și pentru a realiza aceleași îmbunătățiri de bază. Pentru ARCore, Google a identificat trei domenii de bază pentru a aborda acest set de instrumente și acestea sunt următoarele:

Urmărirea mișcării

Înțelegerea mediului

Estimarea luminii

Urmărirea mișcării

Urmărirea mișcării unui utilizator și în cele din urmă, poziția acestuia în spațiul 2D și 3D este fundamentală pentru orice aplicație AR. ARCore ne permite să urmărim schimbările de poziție prin identificarea și urmărirea punctelor vizuale din imaginea camerei dispozitivului.

Un exemplu despre cum funcționează acest lucru este prezentat în figura 3.13

Figura 3.13 – Punct de referintă al capabilităților de urmărire a ARcore

În imaginea de mai sus, vedem modul în care se urmărește poziția utilizatorului în raport cu punctele caracteristice identificate pe canapeaua reală. Anterior, pentru a urmări cu succes mișcarea (poziția), trebuia să preînregistrăm sau să pre-pregătim punctele noastre de caracteristică. Dacă ați folosit vreodată instrumentele Vuforia AR, veți fi foarte familiarizați cu trenul de a antrena imagini sau marcaje țintă.

Acum, ARCore face toate acestea automat pentru noi, în timp real, fără nicio pregătire. Cu toate acestea, tehnologia de urmărire este foarte nouă și are mai multe limitări.

Înțelegerea mediului

Cu cât o aplicație AR înțelege mai bine realitatea utilizatorului sau mediul înconjurător, cu atât mai reușită este imersiunea. Totuși, urmărirea mișcării este doar primul pas, avem nevoie de o modalitate de a identifica obiectele fizice sau suprafețele din realitatea utilizatorului.

ARCore face acest lucru folosind o tehnică numită meshing.

Figura 3.14 – Imagine google prezentând funcția “meshing” în acțiune

Ceea ce vedem în imaginea de mai sus este o aplicație AR care a identificat o suprafață a lumii reale prin mashing. Planul este identificat de punctele albe, în fundal, se poate vedea cum utilizatorul a plasat deja câteva obiecte virtuale.

Înțelegerea și comportamentul de mediu sunt esențiale pentru crearea iluziei realităților amestecate. În cazul în care urmărirea mișcării utilizează caracteristici identificate pentru a urmări poziția utilizatorului, înțelegerea de mediu utilizează interfața pentru a urmări obiectele virtuale în realitatea utilizatorului.

Estimarea luminii

Magicienii lucrează pentru a fi maeștri ai trădării și ai iluziei vizuale. Ei înțeleg că perspectiva și o lumină bună sunt esențiale în prezentarea unei iluzii, iar în dezvoltarea de aplicații AR, acestea nu fac excepție. Dacă pentro o secundă revenim la scenă cu leul virtual ceea ce am reținut au fost luminile și detaliile din umbrele leului și ale solului. Am observat faptul că leul aruncă o umbră pe pământ, chiar dacă nu este acolo?

Acest nivel suplimentar al detaliilor pe lumini este posibil numai prin combinarea urmăririi poziției utilizatorului cu înțelegerea de mediu a poziției obiectului virtual și a modului de a citi nivelele de lumină. Din fericire, ARCore ne oferă o modalitate de a citi sau de a estima lumina într-o scenă, apoi putem folosi aceste informații pentru a lumina sau a umbri obiecte virtuale AR.

Figura 3.15 – Imagine goolge prezentând efectele luminii

Google a dezvoltat ARCore pentru a fi accesibil din mai multe platforme de dezvoltare (Android [Java], Web [JavaScript], Unreal [C-H-] și Unity [C #]), oferind dezvoltatorilor o flexibilitate și multe opțiuni pentru a construi aplicații pe diverse platforme.

În timp ce fiecare platformă are puncte tari și puncte slabe și toate platformele sunt extensii, în esență, de pe Android SDK, care a fost inițial construit ca Tango, acest lucru înseamnă că, indiferent de alegerea platformei, va trebui să instalăm și să fim oarecum familiarizați cu instrumentelor de dezvoltare Android.

Android Studio este un mediu de dezvoltare pentru codarea și implementarea aplicațiilor Android. Ca atare, acesta conține setul de instrumente de bază necesare pentru construirea și implementarea aplicațiilor noastre pe un dispozitiv Android. La urma urmei, ARCore trebuie să fie instalat pe un dispozitiv fizic pentru a fi testat. Android Studio este încorporat în OpenJDK, acest lucru înseamnă că putem omite pașii de instalare a Java, cel puțin pe Windows. Dacă faceți o dezvoltare serioasă a aplicației Android, din nou pe Windows, trebuie să parcurgeți pașii pe cont propriu pentru a instala versiunea completă Java JDK 1.7 și / sau 1.8, mai ales dacă intenționați să lucrați cu versiuni mai vechi de Android.

3.4 ARCore privind unitatea

Următoarea platformă de care ne vom ocupa este Unity. Unity este un motor de căutare cross-platform, care este extrem de ușor de utilizat pentru a construi rapid aplicații grafice și jocuri ARCore pe Unity

Unity a căpătat în ultimi ani o reputație proastă datorită utilizării excesive de jocuri de slabă calitate și nu pentru că Unity putea produce jocuri de calitate bună, pentru că poate, cu siguranță, datorită suprautilizării sale în jocuri de calitate slabă. Cu toate acestea, capacitatea de a crea jocuri rapid devine adesea abuzată de dezvoltatorii care doresc să lanseze jocuri ieftine pentru profit.

3.5 ARCore pe web

Înainte, cele mai multe dezvoltării AR trebuiau să fie facute pe o aplicație originală. Ca excepție, odată cu apariția ARCore, Google a adăugat suport pentru dezvoltarea AR pe web, ceea ce permite utilizatorilor să acceseze aplicațiile AR printr-un browser.

Desigur, aplicațiile web AR nu pot fi niciodată la fel de robuste sau bogate ca o aplicație similară realizată cu Android sau Unity.

Cu toate acestea, ARCore își extinde suportul browser pentru a include iOS și Android. Deci, dacă aveți nevoie de o aplicație AR cross-platform, atunci probabil că doriți să vă concentrați pe dezvoltarea web-ului ARCore.

3.6 Instalarea Node.js

Spre deosebire de alte platforme, nu este nevoie să instalați nimic mai mult pe dispozitiv pentru a utiliza o aplicație web AR. Cu toate acestea, avem nevoie de o modalitate de a servi paginile noastre de aplicații web pe un dispozitiv.

De obicei, acest lucru se face cu un server web, cum ar fi IIS, Tomcat, Jetty, Node sau altele. Pentru scopul nostru, avem nevoie doar de un simplu server FITTP pentru a servi conținut HTML static. Din fericire, Nodul oferă un pachet doar pentru rularea unui server HTTP simplu dintr-un dosar. Pentru a obține acest pachet, trebuie mai întâi să instalăm nodulARCore pe net

Node.js este un timp de lucru ușor, fără blocare și bazat pe evenimente JavaScript, construit în partea de sus a runtime-ului JavaScript Chrome. A devenit extrem de popular datorită bibliotecii sale masive de module sau pachete. Instalăm Node.js doar pentru a folosi un pachet Node.js..

3.7 3D și trei.js

Trăim într-o lume 3D. Prin urmare, pentru a ne păcăli convingător utilizatorii să creadă că realitatea lor este amplificată sau modificată, trebuie să lucrăm cu lumea lor în trei dimensiuni. Acum, fiecare dintre platformele cu care lucrăm (web, Android și Unity), toate au motoare 3D pe care le vom folosi.

În cazul Unității, este motorul 3D și, fără îndoială, cel mai ușor de folosit cu puțin sau fără programare sau cunoștințe matematice necesare. Android și OpenGL ES sunt o secundă îndepărtată, deoarece vor necesita cunoștințe de matematică 3D.

A treia și ultima opțiune este motorul nostru 3D pentru web, care va fi de trei. js bibliotecă. Cele trei.js vor fi cea mai dificilă platformă de lucru cu 3D. Platforma Unreal, așa cum am menționat mai sus, este o altă opțiune platformă ARCore.

Unreal este similara cu Unity în ceea ce privește faptul că oferă instrumente foarte bune de lucru în 3D, cu toate că aceste instrumente sunt mai tehnice și vor necesita întelegerea matematicii 3D pentru a reuși.

Capitolul 4 – Unity

4.1 Introducere

Unity este un motor de joc pe mai multe platforme dezvoltat de Unity Technologies, anunțat pentru prima oară în iunie 2005 la Conferința Mondială a dezvoltatorilor Apple Inc., ca motor de joc exclusiv pentru Mac OS X.

Începând cu anul 2018, motorul a fost extins pentru a susține mai mult de 25 de platforme. Motorul poate fi folosit pentru a crea jocuri tridimensionale, bidimensionale, realitate virtuală și realitate augmentată, precum și simulări și alte experiențe. Motorul a fost adoptat de industrii în afara jocurilor video, cum ar fi filmul, automobilele, arhitectura, ingineria și construcția.

Mai multe versiuni majore ale Unity au fost lansate, ultima versiune stabilă, 2019.1.7, a fost lansată în iunie 2019.

Motorul de joc Unity lansat în 2005, având ca scop "democratizarea" dezvoltării jocului, făcând-o accesibilă mai multor dezvoltatori. În anul următor, Unity a fost numită "runner-up" în categoria "Cea mai bună utilizare a categoriei Mac OS X" în cadrul Apple Design Awards pentru Apple Inc. Unitatea a fost lansată inițial pentru Mac OS X, adăugând ulterior suport pentru browserele Microsoft Windows și Web.

Unitatea 2.0 a fost lansată în 2007, cu aproximativ 50 de caracteristici noi. Versiunea a inclus un motor de teren optimizat pentru medii 3D detaliate, umbre dinamice în timp real, lumini direcționale și spoturi, redare video și alte caracteristici. Versiunea a adăugat, de asemenea, caracteristici prin care dezvoltatorii ar putea colabora mai ușor. Acesta a inclus un strat de rețea pentru dezvoltatori pentru a crea jocuri multiplayer bazate pe User Datagram Protocol, care oferă traducerea adreselor de rețea și sincronizarea de stat și procedurile de la distanță.

Când Apple a lansat App Store în 2008, Unity a adăugat rapid suport pentru iPhone. De mai mulți ani, motorul a fost necontestat pe iPhone și a devenit bine cunoscut cu dezvoltatorii de jocuri iOS. 3.0 a lansat în septembrie 2010 caracteristici care extind caracteristicile grafice Unity ale motorului pentru computerele desktop și consolele de jocuri video. În plus față de suportul pentru Android, Unity 3 a inclus integrarea utilitarului Iluminate Labs Lighthouse Lightmap, redarea retrospectivă, editorul de copaci încorporat, redarea fonturilor native, maparea automată UV și filtrele audio, printre altele.

În 2012, VentureBeat a scris: "Puține companii au contribuit la fel de mult la fluxul de jocuri produse independent ca Unity Technologies. […] Peste 1.3 milioane de dezvoltatori folosesc instrumentele pentru a crea grafică în iOS, Android, consola, PC-uri și jocuri pe bază de web. […] Unitatea vrea să fie motorul jocurilor multi-platformă, perioadă. " Un sondaj din mai 2012, realizat de revista Game Developer, a indicat unitatea ca motor de joc de top pentru platforme mobile. În iulie 2014, Unity a câștigat premiul "Cel mai bun motor" la Premiile Excel Industry Excellence Awards din Marea Britanie. În noiembrie 2012, Unity Technologies a livrat Unity 4.0. Această versiune a adăugat suportul DirectX 11 și Adobe Flash, instrumente noi de animație numite Mecanim și accesul la previzualizarea Linux.

Facebook a integrat un kit de dezvoltare software pentru jocuri care utilizează motorul de joc Unity în 2013. Aceste instrumente au permis căutarea campaniilor publicitare de urmărire și legături profunde, în care utilizatorii au fost direct conectați din posturile social media la porțiuni specifice din cadrul jocurilor și imagini simple în joc partajare. În 2016, Facebook a dezvoltat o nouă platformă de jocuri pentru PC cu Unity. Unity a oferit suport pentru platformele de jocuri Facebook, iar dezvoltatorii Unity ar putea să exporte mai repede și să publice jocuri pe Facebook.

Verge a spus despre versiunea Unity 5 a anului 2015: "Unity a început cu scopul de a face dezvoltarea jocului universal accesibilă. […] Unity 5 este un pas mult așteptat spre acest viitor". Cu Unity 5, motorul și-a îmbunătățit iluminarea și sunetul. Prin intermediul WebGL, dezvoltatorii Unity ar putea adăuga jocurile lor la browserele Web compatibile, fără plug-inuri necesare jucătorilor. Unity 5.0 a oferit o iluminare globală în timp real, previzualizări de cartografiere ușoară, Unity Cloud, un nou sistem audio și motorul de fizică Nvidia PhysX3.3.

Cea de-a cincea generație a motorului Unity a introdus de asemenea Cinematic Image Effects pentru a ajuta jocurile Unity să pară mai puțin generice. Unity 5.6 a adăugat noi efecte de iluminare și particule, a actualizat performanța generală a motorului și a adăugat suport nativ pentru Nintendo Switch, Facebook Gameroom, Google Daydream VR și graficul Vulkan API. Acesta a introdus un player video 4K capabil să ruleze videoclipuri de 360 ​​de grade pentru realitatea virtuală. Cu toate acestea, unii jucători au criticat accesibilitatea Unity din cauza volumului mare de jocuri produse rapid, publicate pe platforma de distribuție Steam de către dezvoltatori neexperimentați. CEO-ul John Riccitiello a declarat într-un interviu că consideră că acest lucru este un efect secundar al succesului Unității în democratizarea dezvoltării jocului: "Dacă aș fi avut cale, aș vrea să văd 50 de milioane de oameni care folosesc Unity – deși nu cred vom ajunge acolo în curând, aș vrea să văd elevii de liceu și colegii care le folosesc, oameni din afara industriei de bază, cred că este trist faptul că majoritatea oamenilor sunt consumatori de tehnologie și nu creatori … locul unde oamenii știu să creeze, nu doar să consume și asta încercăm să promovăm ".

În decembrie 2016, Unity Technologies a anunțat că va schimba sistemul de numerotare a versiunilor pentru Unity de la identificatori bazați pe secvență până la anul de lansare pentru a alinia versiunile cu cadența mai frecventă de lansare; Unity 5.6 a fost, prin urmare, urmată de Unity 2017.

Unity 2017 instrumente au prezentat un motor de redare grafice în timp real, clasificarea culoare și construirea de lumi, analiza operațiunilor live și raportarea performanțelor. Unity 2017.2 a subliniat planurile Unity Technologies dincolo de jocurile video. Acestea au inclus noi instrumente, cum ar fi Timeline, care le-au permis dezvoltatorilor să deseneze animații în jocuri și Cinemachine, un sistem inteligent de camere în cadrul jocurilor. Unity 2017.2 a integrat, de asemenea, uneltele 3DS Max și Maya de la Autodesk în motorul Unity pentru un proces de iterație îmbunătățit în timpul parcurgerii jocului.

Unity 2018 a prezentat Conducta „Scriptable Render“ pentru dezvoltatori pentru a crea grafica de ultimă generație. Acesta a inclus Conducta de redare de înaltă definiție pentru console și PC-uri și Conducta de redare ușoară pentru realitate mobilă, realitate virtuală, realitate augmentată și realitate mixtă. Unity 2018 include, de asemenea, unelte de învățare automată, cum ar fi „Imitation Learning“, prin care jocurile învață din obiceiurile reale de jucător, suport pentru „Magic Leap“ și șabloane pentru noii dezvoltatori.

4.2 Înțelegerea obiectelor și a componentelor jocului

În Unity, fiecare element dintr-o scenă -inclusiv iluminare, terenul și caractere-, este definit ca un obiect de joc. Un obiect de joc nu are proprietăți particulare și nu îndeplinește nicio funcție specifică până când nu îl adăugam ca o componentă. Componentele definesc proprietățile vizuale și funcționale pentru obiectele de joc. Fiecare obiect de joc are o componentă de transformare implicită, care determină poziția și dimensiunile obiectului de joc din scenă.

Configurarea ID-ului de unitate și conectarea, când rulam Unity Editor, deschide caseta de dialog „Sign In Your Unity ID“. Înainte de a putea utiliza Unity Editor, trebuie să creăm un ID de unitate. Pentru a face acest lucru, facem click pe linkul „creați“ din partea de sus a casetei de dialog „Sign In Your Unity ID“, alternativ utilizăm acest link: http://bit.ly/unity_id., apoi, în caseta de dialog care apare, furnizam informațiile solicitate pentru a crea un ID de unitate. Aceasta include numele, o adresă de e-mail validă, numele de utilizator și parola pe care dorim să le utilizăm. De asemenea, trebuie să fiți de acord cu termenii de utilizare.

(Pentru instrucțiuni pas cu pas, inclusiv capturi de ecran, consultați secțiunea (http://bit.ly/unity_activation.)

Figura 4.1 – Logarea în aplicație

După ce creăm Unity ID, alegem o licență. Unity oferă trei niveluri de licență:

Personal Unity – această licență este gratuită, cu condiția ca ”compani să nu aibă venituri brute anuale mai mari de 100.000 usd sau, să nu fi ridicat fonduri peste limită”. Această versiune conține toate modulele de bază, dar când aplicația se lansează, utilizatorul nu poate modifica ecranul de pornire pe care îl vede.

Plus – această licență costă 35 usd/ lună. Putem utiliza această licență dacă compania câștigă "până la 200.000 usd veniturile brute anuale". Pe lângă faptul că oferă acces la toate modulele de bază, această versiune oferă, de asemenea, mai multe pachete, care îmbunătățesc funcționalitatea Unity de bază și permit să modificam ecranul de pornire.

Pro – această licență costă 120 usd/ lună, dar permite "venit nelimitat sau capacitate de strângere de fonduri". Această versiune extinde capacitățile versiunii Plus prin includerea de servicii suplimentare, cum ar fi analizele și vizualizările, precum și suportul premium. După ce creăm unitatea de identitate și alegem o licență, utilizăm unitatea de identitate pentru a ne conecta la unitate.

Vom vedea un ecran de întâmpinare ca cel din Figura 5.1. Acest ecran are două file:

Proiect – facem click pe această filă pentru a crea un nou proiect, făcând click pe link-ul nou în colțul din dreapta sus al ecranului sau deschizând unul existent, făcând click pe link-ul “Open“ de lângă link-ul „New“ și selectăm proiectul pe care dorim să-l creăm deschis.

Learn – faceți click pe această filă pentru a accesa link-urile către tutoriale, proiecte de instruire și resurse care ne pot ajuta să începem să dezvoltam aplicațiile cu Unity.

Figura 4.2 – Imagine de început proiect în Unity

4.3 Crearea unui proiect nou

Pentru a crea un nou proiect, urmam acești pași:

Facem clic pe link-ul New în fila Proiecte.

Introducem un nume pentru proiect în caseta „Name“ proiect. În acest caz, tastam UnityBasics.

Selectam butonul opțiune 3D.

Introducem o locație pentru codul sursă al proiectului în caseta Locație.

Facem click pe butonul Creare proiect, după un moment, editorul unității va fi deschis.

Principalele componente ale editorului Unity sunt următoarele:

ș Toolbar

ș Hierarchy window

ș Scene view

ș Inspector window

ș Project window

Fereastra prezintă de asemenea o bara de meniu, aflată deasupra toolbar. Acest component este auto-explicativ și nu este prezentată cu mai multe detalii

Figura 4.3 – Captură de ecran în Unity.

Putem modifica configurația ecranului Unity editor pentru al adapta nevoilor noastre prin dragarea ferestrelor Hierarchy, Inspector și Project.

Bara Toolbar – Toolbar conține butoane care ne oferă acces rapid la cele mai importante facilități ale Unity Editor, respectiv:

ș Drag, Move, Rotate, Scale și RectTransform – folosim aceste butoane pentru a poziționa obiecte în decor.

ș Gizmo toggles, aceste butoane, numite Center și Local, ne permite să comutăm poziția manetei gismo. Le vom folosi pentru a defini centrul unei transformări

ș Play, Pause și Step, folosim aceste butoane pentru a controla execuția aplicației noastre în modul play al editorului. Folosim acest mod pentru a previzualiza aplicația în editorul Unity.

ș Collab, când apăsăm acest buton, se deschide o fereastra pop-up, pe care o folosim pentru a controla Unity Collaboration. Unity Collaboration este un service cloud care ne permite să depunem proiectul în Cloud așa încât membrii echipei să poată observa rapid modificarile aduse și să-și sincronizeze munca cu a noastră.

ș Cloud, când apăsăm acest buton, se deschide o fereastră pop-up, unde putem configura servicii Unity precum Unity Ads, Unity Analytics, Unity Cloud Build și altele.

ș Account, apăsând acest buton, deschidem un meniu care ne ofera accesul la instrumente cu care să administrăm contul și licența.

ș Layers, apăsarea acestui buton deschide un meniu care conține stratele ce vor aparea pe Scene view

ș Layout, acest buton – numit Default în Figura 5.3, când îl acționăm deschidem un meniu cu opțiuni layout predefinite. Utilizăm această lista pentru a rearanja rapid ferestrele editorului Unity. Pentru a reface aranjamentul, selectăm optiunea Default.

Fereastra Hierarchy – uneori numită simplu Hierarchy prezintă o listă a tuturor obiectelor din proiectul curent. Hierarchy este ca Solution Explorer din Visual Studio însă prezintă o lista a obiectelor care compun scenele, în locul fișierelor sursă care compun proiectele. Astfel, folosim fereastra Hierarchy cam în același fel în care utilizăm Solution Explorer.

În mod implicit, fereastra Hierarchy conține numai doua obiecte: o camera obiect principală și un obiect de directionare a luminii. Pentru a adăuga noi obiecte, folosim meniul ferestrei Hierarchy.

Așa cum se prezintă în Figura 4.4, acest meniu conține o listă de obiecte încorporate, pe care le putem folosi pentru a extinde decorul prestabilit.

Figura 4.4 – Captură de ecran în Unity.

Scene View – este un component interactiv în care plasăm și poziționăm toate obiectele care compun aplicația. Urmăm pașii:

Adaugăm obiecte folosind fereastra Hierarchy.

Selectăm obiectul folosind fereastra Hierarchy sau prin Scene view.

Poziționăm și transformăm obiectul folosind butoanele toolbar sau cu fereastra Inspector.

Dacă comparăm succesiunea de operații Unity Edotor cu cea a Visual Studio, Scene view este ca un proiectant vizual care ne permite să folosim abordarea drag-and-drop pentru a defini stratul vizual al aplicaței.

Implicit, Scene view conține trei taburi. (În fapt, ele sunt ferestre separate pe care le putem mișca liber, însă eu voi face referire la ele ca fiind taburi aici.)

Scene – acest tab afișează modul scene preview, care conține un Scene gismo (în coltul dreapta sus) și o bară de control care va ajuta să vizualizați scena.

Game View – folosim acest tab pentru a vizualiza și test aplicația finală – de exemplu, dacă scripturile funcționează și dacă obiectele controlate se comportă conform așteptărilor.

Asset Store – acest buton deschide depozitul de articole. Aici se descarcă diverse articole (gratis sau achiziționate) pentru a putea începe construirea de medii consistente pentru aplicațiile Windows Mixed Reality.

Scene Gizmo – după cum se observă în Figura 4.5, scena gismo arată ca un cub cenușiu cu șase brațe conice care pornesc din centrul fiecarei laturi a cubului. Folosim scena gismo pentru a modifica unghiul de vizualizare și modul de proiecție, pentru a schimba unghiul de vizualizare, apasăm pe unul din brațele conice. Sau, facem click dreapta pe scena gismo și alegem unghiul de vizualizare dorit din meniul care apare (vezi figura 4.6) – pentru a reveni la unghiul inițial, facem click dreapta pe scena gismo și selectam Free. Pentru a schimba perspectiva, facem click dreapta pe scena gismo și dezactivăm opțiunea Perspective pentru a activa modul Orthographic, cunoscut și ca Isometric, din meniul context. Putem să mai comutăm modurile Perspective apasând pe Persp sau Iso de sub scena gismo.

Figura 4.5 – Scena gizmo

Figura 4.6 – Meniul context al Scenei gizmo

În afară de utilizarea scenei gismo pentru modificarea unghiului perspectivei, putem folosi mouse-ul sau touchpad-ul. Pentru aceasta, apasăm și menținem tasta “Alt” în timp ce apăsăm și tragem cursorul. Putem utiliza și mouse-ul sau touchpad-ul pentru a modifica zoom-ul prin utilizarea funcției scroll. Pentru a ne mișca pe ecran, putem folosi săgețile de pe tastatură sau apăsăm butonul Drag din toolbar, are desenat pe el o mână sau apăsăm tasta Q de pe tastatura pentru a utiliza instrumentul Drag.

Bara de control – prezentată în Figura 4.7, include câteva setări pentru controlul vizualizării scenei.

Figura 4.7 Bara de control cu setările Draw Mode

Bara de control include accesul la urmatoarele setări:

ș Draw Mode

ș View, lighting, and audio

ș Effects

ș Gizmos

Setările Draw Mode – acestea sunt împărțite pe câteva grupe.

Cele mai importante pentru scopurile noastre sunt:

Shading Mode,

Miscellaneous și

Global Illumination.

Grupul Shading Mode are urmatoarele opțiuni:

Shaded Click, cu această opțiune vizualizăm suprafețele și texturile obiectului selectat.

Wireframe, apăsând pe acest buton pentru a vizualiza o wireframe care redă obiectul selectat.

Shaded Wireframe, apăsăm pe această opțiune pentru a vizualiza suprafețele și texturile și o wireframe a obiectului selectat.

Figura 4.8 – Captură de ecran în Unity.

O comparație a modurilor shading în redarea unei sfere:

Umbrită (stânga),

wireframe (mijloc) și

wireframe umbrită (dreapta).

Grupul Miscellaneous are urmatoarele opțiuni (vezi figura 4.9):

Shadow Cascades, selectam această opțiune pentru a afișa lumina direcțională în cascade de umbră.

Render Paths, selectam această opțiune pentru a arăta calea de redare a codurilor de culoare. Albastru înseamnă umbrirea prestabilită, verdele este lumina, iar galbenul înseamnă continuarea redării.

Alpha Channel, alegem această opțiune pentru a reda opacitatea (alfa). Obiectele stralucitoare au opacitate redusă.

Overdraw, alegem această opțiune pentru a reda înfășurările transparente ale obiectelor. Intensitatea fiecarui punct din scenă redata sporește cu numărul de obiecte suprapuse.

Mipmaps, alegem această opțiune pentru a desemna marimea texturii pe coduri de culoare. Albastru arată că textura ar putea fi mai largă, în verme ce roșu denotă ca dimensiunea texturii este prea mare.

Sprite Mask, alegem această opțiune pentru a afișa măștile-fantomă.

Figura 4.9 (grupul Miscellaneous): Shadow Cascades (stânga), Alpha Channel (mijloc), Mipmaps (dreapta).

Grupul Global Illumination oferă câteva optiuni care ne ajută să vizualizăm iluminarea globala a scenei, incluzând UV Systems, Albedo, strălucirea și Direcționarea.

Opțiunile View, lighting și audio

Lângă opțiunea Draw Mode de control, veți vedea trei butoane:

2D/3D – acest buton comută între vizualizarea 2D și 3D a scenei.

Lighting – acest buton activează/ dezactivează luminarea scenei.

Audio – acest buton activează/ dezactivează efectele audio.

Setarile Effects – butonul Effects activează/ dezactivează urmatoarele opțiuni:

Skybox – activează/ dezactivează redarea texturii skybox.

Fog – activează/ dezactivează efectul de ceața.

Flares – activează/ dezactivează afișarea semnalelor luminoase.

Animated Materials – activează/ dezactivează animarea materialelor.

Image Effects – activează/ dezactivează toate efectele deodata.

Meniul gismos, prezentat în figura 4.10, conține multe opțiuni adiționale pentru controlul redării obiectelor în decor.

Figura 4.10 – Meniul gismos

Fereastra Inspector – numită uneori simplu Inspector, prezintă o lista de proprietăți configurabile ale obiectului selectat în fereastra Hierarchy sau Scene view. Ca exemplu, Figura 4.11 prezintă fereastra Inspector care afișează proprietățile camerei obiect principale.

Figura 4.11 – fereastra Inspector pentru camera obiect principală.

Fereastra Inspector împarte proprietățile în câteva grupuri. Diferitele tipuri de obiecte au grupuri diferite de proprietăți. Oricum, anumite grupuri se aplică multor obiecte, cum ar fi următoarele:

Identity – acest grup, localizat în partea de sus a ferestrei inspector, include o casetă cu numele obiectului, o listă Object Tag drop-down, o lista Layer drop-down, toate le putem folosi pentru a asocia obiectul cu un anumit strat al scenei și un Static checkbox, pe care îl putem folosi pentru a informa motorul Unity că obiectul nu se va muta în timpul execuției aplicației (astfel dând posibilitate Unity să optimizeze simularea fizică pentru a imbunătăți preformanța aplicației).

Transform – acest grup este localizat în dreapta sub grupul identitate. Folosim aceste casete ale grupului pentru a defini poziția obiectului în scenă, precum și unghiul de rotație și scara pe fiecare direcție. Modificarea proprietăților Transform din Inspector este o cale convenabilă de a poziționa și redimensiona obiectele în scenă.

Component – folosim acest grup, localizat în partea de jos a ferestrei inspector, pentru a asocia componentele cu obiectul jocului.

Fereastra Project Implicit, fereastra Project conține două taburi:

Consola – acest tab afișează atenționări, erori și alte mesaje generate de Unity. De obicei, utilizăm acest tab pentru devirusare și construcție (pentru a detecta eventualele erori). Tabul Unity Console este asemănător cu fereastra Debug din Visual Studio.

Project – folosim acest tab pentru a afișa și administra proprietățile din proiectul curent. Acest tab are un careu în stânga care prezintă o lista ierarhică a tuturor proprietăților și fișierele cu acestea. Selectând un fișier din careu, conținutul lui este afișat în dreapta. (vezi Figura 4.12) Tabul Project se folosește pentru a căuta proprietăți și a le adăuga în scenă.

Figura 4.12 – Tabul Project afisează proprietațile proiectului.

Taburile Console și Project pot fi de asemenea afișate ca ferestre separate și plasate acolo unde dorim. Aici le descriu împreună pentru că ele sunt combinate într-o singură fereastră în configurația prestabilită a Unity Editor.

Crearea scenelor – Lucrul cu obiecte 3D

Există multe căi de a adăuga un obiect 3D intr-o scena, printre care:

click dreapta în fereastra Hierarchy window, alegând un obiect 3D din meniul care apare și selectând tipul de obiect pe care vrem să-l creăm din lista care apare (referire la Figura 4.4)

butonul Create din colțul stânga sus al ferestrei Hierarchy, alegând un obiect 3D din meniul care apare și selectând tipul de obiect pe care vrem să il creăm din meniul care apare

deschizând maniul GameObject din bara de meniuri, alegând obiectul 3D și selectând tipul de obiect pe care vrem să il creăm. Putem crea șase tipuri de obiecte simple 3D – cub, sferă, capsulă, cilindru, plan și cuadrant, precum și câteva obiecte 3D complexe, incluzând terenul, copacul, păpușa de cârpă, zona de vânt și text 3D.

Explorarea obiectelor 3D primitive Figurile 4.13 și 4.14 prezintă exemple de obiecte 3D primitive adaugate unei scene.

Figura 4.13 (Obiecte 3D primitive: sferă (stânga), capsulă (mijloc), și cilindrul (dreapta).

Figura 4.14 (Obiecte 3D primitive: plan (stânga) și cuadrant (dreapta).

Poziționarea unui obiect 3D primitiv implicit – acest obiect nou va fi poziționat în originea sistemului de coordonate asociat unei scene (când se modifică zona scenei, noi obiecte vor fi plasate aproximativ în centrul regiunii afișate în mod curent din scenă.).

Sistemul de coordonate utilizează trei vectori componenți (X, Y, Z) pentru a reprezent în mod unic poziția obiectului în scenă. Pentru a verifica poziția curentă a obiectului în scenă, selectămi obiectul (în acest caz cubul) și comutăm pe inspector. Setările Position din grupul Transform vor indica poziția: 0, 0, 0. Dacă modificăm aceste valori, cubul va fi repoziționat în consecință.

Putem mișca obiectul și prin utilizarea manetei Move gizmo. O manetă gismo este un instrument vizual care ne ajută să transformăm un obiect.

Putem vedea maneta Move gizmo a cubului în figura 4.15.

Figura 4.15 – Captură de ecran din Unity

Ea prezintă trei săgeți de coordonate cu coduri de culori: roșu pentru axa X, verde pentru axa Y și albastru pentru axa Z. Pentru a utiliza maneta Move gizmo, drag and drop săgeata care corespunde axei dorite. Acest lucru este util când dorim să ajustăm poziția unui obiect de-a lungul unei singure axe. În timpul acestui proces, editorul Unity se asigură că translația obiectului nu reflectă mișcări involuntare a mouse-ului sau a touchpad-ului.

Rotirea unui obiect 3D primitiv – există două moduri de a roti un obiect 3D primitiv:

prin modificarea proprietăților Rotation din grupul Transform din Inspector

apăsând butonul Rotate din toolbar (evidențiat în Figura 4.16)

Figura 4.16 – Captură de ecran în Unity

Butoanele toolbar folosite pentru a accesa instrumentele de manipulare a obiectelor din editorul Unity. Este selectat butonul Rotate tool. Când apăsăm butonul Rotate, un Rotate gismo cu câteva sfere înconjoară obiectul selectat. (figura 4.17.) Precum sagetile din Move gismo, sferele active au coduri de culoare: sfera roșie corespunde axei X, sfera verde axei Y și sfera albastră axei Z. Apăsați pur și simplu pe sfera reprezentând axa în jurul căreia doriți să rotiți obiectul și dragați cursorul.

Figura 4.17 – Rotirea unui obiect.

Când rotim un obiect, proprietățile Rotate din grupul Transform al Inspector afișează unghiurile de rotație.

Scalarea unui obiect 3D primitiv – putem utiliza fie proprietățile Scale din grupul Transform al Inspector, fie putem apăsa butonul scale din toolbar (localizat în dreapta butonului Rotate: (figura 4.14). Aceasta activează comutatorul Scale gismo. (vezi figura 4.17.) Fiecare axa de scalare este reprezentată printr-o linie cu un cub cu cod de culoare la un capăt. Click and drag un cub pentru a scala obiectul de-a lungul direcției corespunzătoare. (Din nou, roșu corespunde axei X, verde axei Y și albastru axei Z.). Din nou, toate schimbările vor fi automat reflectate în proprietățile Scale din grupul Transform al Inspector.

Figura 4.18 – Scalarea unui obiect.

Utilizarea instrumentului RectTransform instrumentul, acesta combină instrumentele Move, Rotate și Scale într-un singur gismo. Pentru a o accesa, apasăm butonul RectTransform din toolbar (butonul cel mai din dreapta prezentat în figura 4.15). Așa cum se vede în figura 4.19, un dreptunghi cu pete mărunte albastre în fiecare colț și o icoană mică în formă de cerc plin în centru vor înconjura obiectul selectat acționînd în unul din următoarele moduri:

pentru a mișca un obiect, click oriunde în interiorul dreptunghiului și drag în direcția dorită.

pentru a roti un obiect, click dincolo de colț, apoi, când icoana cursorului se schimbă, click și drag icoana în direcția dorită.

pentru a scala un obiect, poziționăm cursorul într-un colț al dreptunghiului (pentru a scala pe două direcții simultan) sau pe o latură (pentru a scala pe o singură direcție). Apoi, când se schimbă icoana cursorului, click și drag spre afară sau înăuntru.

Figura 4.19 – Transformarea unui obiect cu instrumentul RectTransform.

Toate modificările făcute astfel vor fi reflectata în grupul Transform din Inspector. Utilizarea obiectelor 3D primitive pentru a crea elemente pentru scena Î mod obișnuit, nu se folosesc obiecte 3D primitive ca atare, ci le transformăm și aplicăm materiale pe ele pentru a crea obiecte de tip real.

De exemplu:

Cuburi – pentru a construi ziduri, trepte, clădiri și așa mai departe.

Sfere – pentru a crea mingi, planete și altele asemănătoare.

Capsule – pentru a înlocui cuburile cu muchii ascuțite la construirea de clădiri etc. –Cylindri

Acestea se potrivesc bine la crearea de posturi și tije.

Plane – le putem utiliza pentru a crea suprafețe plane. Cuadranți, aceștia sunt utilizați la afișarea de imagini și la crearea de interfețe simple în scena. Un cuadrant este ca un plan, însă suprafața sa este orientată în planul XY. Aceasta înseamnă că trebuie să schimbi unghiul de vizualizare pentru a vedea suprafata lui. (referire la figura 4.14 și comparați gismosurile Scene din fiecare imagine.)

Crearea de obiecte (parenting)

Putem combina obiectele 3D primitive pentru a crea modele 3D complexe. Cand se lucrează cu asemenea elemente, se foloseste adesea parenting-ul. Parenting-ul unui obiect descria locația sa în ierarhia scenei. Elementul de top este părintele, iar obiectele de sub el sunt definite drept copiii săi sau descendenții. În general, această ierarhie conține mai multe nivele. În scena implicită pe care am creato mai devreme, scena fără titlu era părintele, a doua obiecte: camera principala și lumina direcțională,

(referinta la figura 4.4). Parenting-ul obiectelor este de asemenea foarte util când dorim să manipulăm mai multe obiecte deodată.

De exemplu, putem muta, roti sau scala un grup de obiecte simultan, în loc să ajustăm proprietățile fiecarui obiect în mod independent. Pentru a face un obiect (să îl numim obiectul A) să fie descendentul unui alt obiect (obiectul B), trebuie să utilizăm fereastra Hierarchy. Facem click pe obiectul A și dragăm către obiectul B. Când eliberăm butonul mouse-lui, obiectul B va deveni părintele obiectului A. De acum înainte, orice transformare aducem părintelui se va aplica și descendenților săi. Cum funcționează aceasta în practică:

îndepartăm obiectul cub de pe scenă făcând click dreapta pe el în Hierarchy și alegem Delete din meniul care apare.

adaugăm un cub nou, un cilindru, o sferă, asigurându-ne că sunt toate poziționate în origine (0, 0, 0).

click pe cub pentru al selecta, apoi, în proprietățile Scale din grupul Transform al Inspector, modificam setarea X la 1,5, setarea Y la 0,1 și setarea Z la 1,5.

click pe sferă pentru a o selecta, apoi, în proprietățile Position din grupul Transform al Inspector, modificăm setarea Y la 1.

lăsăm cilindrul netransformat, apoi, în Hierarchy, dragăm cilindrul și sfera obiecte spre cub.

click dreapta în Hierarchy, alegem Save Scene As și setăm numele scenei în MyScene, scena salvată ar trebui să arate ca în figura 4.20

Figura 4.20 Un obiect creat dintr-un cub, un cilindru și o sferă

Cu aceasta scena, oricând selectăm cubul, toți descendenții săi vor deveni activi. Deci putem să-i transformăm împreună folosind Scene view și toolbar sau modificând manual prioprietățile grupului Transform din Inspector.

Pentru a transforma independent un obiect descendent, îl selectăm în Hierarchy. Orice modificare îi aducem, ele nu se vor aplica părintelui sau oricărui alt obiect de pe același nivel ierarhic.

Adaugarea 3D Text

Obiectul 3D text afișează șiruri de litere, numere sau simboluri. Acestea pot apărea pe un singur rând sau pe mai multe. Dupa ce am adăugat un obiect 3D text unei scene – lucru pe care îl facem așa cum adaugăm orice alt tip de obiect – putem să-i schimbăm aspectul modificând parametrii din Inspector.

Opțiunile includ următoarele:

Text introducem textul care urmează să fie afișat în obiectul 3D text, odată selectată caseta Rich Text, motorul de redare va formata șirul pe baza urmatoarelor taguri:

<b>.. .</b> – aceste taguri introduc caractere îngroșate în obiectul 3D text. De exemplu, sirul <b>Mixed Reality</b> are drept rezultat un obiect 3D text cu textul Mixed Reality scris cu caractere îngrosate.

• <i>. . .</i> aceste taguri introduc caractere italice. De exemplu: șirul <i>Hello, World !</ i> va aparea drept Hello, World! cu fonturi italice.

<size=x>.. . </size> aceste taguri setează mărimea fontului la X pixeli. De exemplu: șirul <si ze=t15>Big Text </size> rezultă într-un obiect 3D text cu textul Big Text setat la 45 de pixeli.

<color=ftrrggbbaa>. . . </color> sau <color=color name>. </color> aceste taguri setează culoarea fontului la codul hexazecimal sau la numele culorii dorite. De exemplu: sirurile <color=liff0000ff>Red</color> și <color=red>Red</color> produc amândouă același rezultat: un obiect 3D text conținând cuvântul Red scris cu roșu.

OffsetZ acest parametru indică distanța de la originea axei Z la care urmează să apară textul.

Character Size acest parametru setează mărimea fiecărui caracter.

Line Spacing acest parametru setează spațiul dintre rânduri.

Anchor acest parametru marchează punctul de început al transformării. Dacă modificați valoarea acestuia, proprietățile transform (poziție, rotație și scalare) vor începe de la acest punct.

Alignment acest parametru setează alinierea textului.

Tab Size acest parametru setează mărimea indentului din obiectul 3D text. (pentru a crea un indent, tastați \t.)

Font, Font Size, Font Style și Color acești parametrii specifică fontul dimensiunea fontului, stilul și culoarea. Putem să folosim acești parametri în locul tagurilor pentru a modifica aspectul textului.

Adăugarea unei marionete (RagdolI)

O marionetă este un instrument care implementează automat fizica necesară pentru a face ca un personaj să se miște și să interacționeze cu obiectele dintr-o scenpă în mod realist. Înainte de a putea crea o marionetă, trebuie să asamblăm diferite elemente care îi vor alcătui corpul, inclusiv picioarele, coapsele, pelvisul, brațele, coatele, mâinile și șira spinării. Putem modela aceste obiecte într-un soft 3D pentru a include pielea.

Acest proces consumă timp, totuși pentru a grăbi lucrurile, acest capitol folosește personajul Ethan, inclus în pachetul de personaje Unity standard.

Pentru a importa pachetul de personaje și a extrage de acolo pe Ethan, urmăm acești pași:

deschidem meniul Assets menu, alegem Import Package și selectăm Characters. Se deschide fereastra Import Unity Package, conținând o lista de personaje incluse.

Click butonul All pentru a selecta toate pozițiile.

Click pe butonul Import.

Când operația de import este încheiată, apare fereastra Project, deschidem fișierul Assets/Standard, Assets/Characters/ ThirdPersonCharacter/ Models, așa cum se poate vedea în figura 4.21. (sau, tastăm Ethan în caseta de căutare.). apoi click și drag pe Ethan în Scene view. (click OK în orice căsuță de dialog care apare.)

Figura 4.21 – Fereastra Project prezentând modelul Ethan.

Urmatorul pas este să adăugăm un plan și alte câteva obiecte în scenă, inclusiv pe Ethan, un copac și ceva 3D text. Mai întâi, ne asigurăm de faptul că instrumentele sunt în modul Global – adică, cu comutatorul gismo setat la Center și Local. După ce adăugăm obiectele, setăm parametrii Position și Rotation în grupul Transform al Inspector.

Utilizarea Materialelor

Până acum, am creat câteva obiecte 3D, totuși, toate aceste obiecte, cu excepția obiectului 3D text, au aceeași culoare. Aceasta pentru că toate au folosit același material presetat. Putem aplica un material diferit unui obiect pentru a schimba modul de redare a suprafețelor acestuia.

Să verificăm materialele și să creăm câteva pentru a le aplica frunzelor de pe copac, obiect pe care l-am asamblat ceva mai devreme. Pentru început, trebuie să importăm texturile potrivite acestor materiale în Unity. În acest exemplu vom utiliza texturile din pachetul environment din elementele Unity standard.

Pentru a importa acest pachet, deschidem meniul Assets, alegem import Package și selectăm Environment. Apoi importăm toate elementele pachetului. Pasul următor este să creăm materialele:

Creăm un folder nou pentru materialele pe care le vom crea. Pentru aceasta, deschidem fereastra Project și faceti click dreapta pe fișierul Assets. Apoi, în meniul care apare, alegem opțiunea Create și selectăm Folder.

2. Denumim noul folder Custom Materials.

3. Click pe fișierul Custom Materials pentru al selecta.

4. Deschidem meniul Assets, alegem Create și selectăm Material. Astfel

adaugăm un material nou în fișierul Custom Materials.

5. Denumim noul material LeavesMaterial.

6. În Inspector pentru materialul LeavesMaterial, deschidem Shader drop-

down list și alegem Nature/Tree Creator Leaves Fast.

7. În Inspector, apăsămi butonul Select pe spațiul textură (evidențiat cu

albastru) pentru a deschide fereastra Select Texture. (vezi Figura 4.22.)

Figura 4.22 – Crearea materialului pentru frunze utilizând Inspector pentru material (stânga) și opțiunile Select Texture (dreapta).

În fereastra Select Texture, selectăm textura frunzelor pe care o dorim. (eu am ales Broadleaf Mobile_Atlas.)

9. Drag și drop materialul LeavesMaterial pe copacul din scenă.

10. Opțional, ajustăm numărul frunzelor după preferință.

Pentru a face copacul să arate chiar și mai realist, putem crea un material pentru coaja lui, urmând pașii:

1. Selectăm fișierul Assets/Custom Materials din fereastra Project.

2. Deschidem meniul Assets, alegem Create și selectăm Material pentru a crea noul material.

3. deenumim noul material BarkMaterial.

4. În Inspector, modificăm setarea Shader în Nature/Tree Creator Bark.

5. Selectăm o textură de baza pentru material. (eu am ales ConiferBark.)

6. Drag și drop materialul BarkMaterial pe ramurile copacului din Scene view.

Figura 4.23 prezintă versiunea finala a copacului.

Capitolul 5 – Studiu de caz

5.1 Introducere

Tema proiectului este crearea unui joc 3D, cu ajutorul unui motor grafic. Jocul video este o activitate recreațională care implică unul sau mai mulți jucători, definit printr-un scop pe care jucătorii încearcă să îl atingă și un set de reguli ce determină acțiunile posibile. Încă de la apariția jocurilor arcade, la începutul anilor `70, piața jocurilor video este într-o continuă creștere, fiind estimată la sute de miliarde dolari.

Jocul creat de mine este un joc de tip shooter, controlat de un singur jucător,ce are ca scop supraviețuirea și distrugerea valurilor de inamici, pentru obținerea unui punctaj cât mai mare.

Ordinea dezvoltării jocului este:

Crearea mediului de desfășurare a jocului

Model ce reprezintă jucătorul

Poziția camerei

Adăugarea inamicului

Elemente UI (User Interface) și HUD (Heads-up Display)

Sistem de recompensare

Respawn-ul inamicilor

Sfârsitul jocului

5.2 Crearea mediului de desfășurare a jocului – File> New Scene

O scenă este formată din obiectele jocului. Ele sunt folosite pentru crearea unui meniu, nivele individuale ale jocului și altele. În fiecare scenă, putem plasa mediul jocului, obstacole și decorațiuni, în principiu construim jocul pe capitole.

Obiecte (GameObject)

Obiectele au nevoie de proprietăți speciale înainte să reprezinte un caracter, un mediu sau un efect special, ele sunt alcătuite din multe piese numite componente. În funcție de obiectul pe care dorim să îl creăm, putem adăuga diferite combinații de componente.

Pe sistemul de operare Windows crearea unui obiect nou se face prin combinația de taste Shift-Control-N.

Figura 5.1 – Captură de ecran în Unity pentru editarea GameObject

Adăugarea componentelor

Componentele obiectului se pot adăuga din meniul Components.

Figura 5.2 – Captură de ecran în Unity pentru aduagarea unui component.

Valorile sau proprietățile componentelor pot fi modificate din editor sau prin scripturi.

Scriptarea

Scriptarea este un ingredient esențial și bază în toate jocurile. Chiar și cele mai simple jocuri au nevoie de scripturi pentru a putea răspunde la acțiunile date de jucător. Dincolo de asta, scripturile pot fi folosite pentru a crea efecte grafice, pentru a controla comportamentul fizic al obiectelor sau pentru implementarea unei inteligențe artificiale pentru caracterele din joc.

Există 2 limbaje de programare suportate de Unity:

C#(C-sharp), limbaj similar cu Java sau C++

UniyScript, limbaj creat special pentru Unity și modelat după JavaScript

Scripturile pot fi create direct din Unity prin selecția Assets > Create > C# Script (or JavaScript) din meniu.

Figura 5.3 – Captură de ecran în Unity pentru adugarea unui Script.

La deschiderea scripturilor, Unity folosește automat MonoDevelop.

Script Unity:

Figura 5.4 – Captură de ecran în Visual Studio asupra Script-ului.

Script C#:

Figura 5.5 – Captură de ecran asupra script-ului de inceput in C#.

Aplicațiile în Unity pot fi create specific pentru anumite platforme cum ar fi iOS, Android, Windows, Web Player, WebGL și altele.

Realizarea Aplicației

5.3.1 Adăugarea unui Plane

După ce creăm un proiect nou din Unity > New Project, primul lucru pe care trebuie să-l facem este să creăm un Plane căruia îi vom atribui funcția webcamScript prin care vom vedea camera telefonului.

În ierarhie > Click Dreapta > 3D object > Plane după care îl vom roti pe axul x la 90 de grade.

Figura 5.6 – Captură de ecran în Unity

5.3.2. Legatura dintre Plane și Camera Telefonului

Adaugăm script-ul webcamScript la Main Camera. Prima line de cod pe care o vom adăuga este să facem referința dintre Plane catre Main Camera

public GameObject webCameraPlane;

Adaugăm obiectul Plane la Main Camera

Figura 5.7 – webcam script

WebCamTexture webCameraTexture = new WebCamTexture ();

Crearea unui Texturi a webcam-ului

webCameraPlane.GetComponent<MeshRenderer>().material.mainTexture = webCameraTexture;

Textura va fi luată și aplicată texturii principale a camerei ce am creat-o în Scena.

webCameraTexture.Play();

Textura va fi rulată.

Datorită faptului că facem această aplicație pentru dispozitive mobile trebuie să ține cont de faptul că “Plane” va fi rotit 180 de grade, astfel vom adauga căteva linii de cod:

if (Application.isMobilePlatform) {

Verificam dacă suntem pe o platformă mobile

GameObject cameraParent = new GameObject ("camParent");

Dacă suntem, se va crea un obiect Camera “Părinte” și acesta va fi înlocuită cu “Main Camera” pe care o avem noi.

this.transform.parent = cameraParent.transform;

Stabilirea relatiei Părinte-Copil dintre camera telefonului și “Main Camera” noastră

cameraParent.transform.Rotate (Vector3.right, 90);

În cele din urma Camera Părinte va fi rotită la 90 de grade

Input.gyro.enabled = true;

Această linie de cod face ca giroscopul telefonului să fie activ.

Apoi, în functia Update vom adauga:

Quaternion cameraRotation = new Quaternion (Input.gyro.attitude.x, Input.gyro.attitude.y, -Input.gyro.attitude.z, -Input.gyro.attitude.w);

Quaternion-ul numit cameraRotation va fi setat egal cu toate valorile giroscopului din telefonul mobil

this.transform.localRotation = cameraRotation;

Setarea valorilor din LocalRotation camerei.

5.3.3 Setarea limitelor

Trebuie să decidem care sunt limitele în care obiectele vor aparea. Nu vrem ca aceastea să iasă din cadru.

Right Click î ierarhie > 3D Object > Cube

Figura 5.8 – Captură de ecran în Unity pentru adugarea unui Cub.

Vom debifa Mesh Renderer și Box Collider

5.3.4 Crearea Navei Spațiale

Vom folosi o nava spatială pre-făcută.

Figura 5.9 – Captură de ecran în Unity prezentand nava spatiala fara textura.

Apoi adăugăm textura.

Figura 5.10 – Captură de ecran în Unity prezentand nava spatiala cu textura.

Acum vom adauga script-ul ce va face nava să se miște în jurul camerei.

Click Dreapta > Add Component > New Script > enemyScript

Figura 5.11 – Script-ul necesar pentru miscările navei spațiale.

Acest script va permite Navei să se miște înainte pentru 3.5 secunde, să se rotească la 180 de grade și să meargă din nou înainte pentru 3.5 secunde.

Pentru a face asta posibil vom face o co-rutină. Dacă vrei să întarzii un anumit număr de secunde nu putem pune asta în funcția “Update”.

transform.Translate(Vector3.forward * 3f * Time.deltaTime);

Nava va merge înainte la o viteză constantă.

yield return new WaitForSeconds (3.5f);

aceasta este co-rutina de care am menționat și ce ne va permite să așteptăm 3.5 secunde și apoi să se rotească nava cu urmatoarea linie de cod:

transform.eulerAngles += new Vector3 (0, 180f, 0);

5.3.5 Elemente UI (User Interface) și HUD (Heads-up Display)

Pentru a adăuga elemente pe ecran vom crea un obiect nou (Canvas):

GameObject > UI > Canvas, crează o formă rectangulară 2D

Figura 5.12 Captură de ecran în Unity după adugarea unei Canvas. (stânga)

Figura 5.13 Captură de ecran în Unity cu parametrii Canvas-ului (dreapta)

Creăm un obiect copil, Image al obiectului Canvas pentru a arăta pe ecran bord-ul navei pe parcursul jocului.

Figura 5.14 – Adugarea panoului de bord.

Creăm un al 2- lea obiect copil, Image al obiectului Canvas pentru a arăta Ținta pe parcursul Jocului

Figura 5.15 – Modificarea dimensiunilor panoului de bord.

Creăm un al 3- lea obiect Button copil al Canvas pentru a trage proiectilele.

GameObject > UI > Button ce-l vom ajusta ulterior

Figura 5.16 – Modificarea Butonului.

Acum că avem butonul vom reveni la script pentru al adăuga

public Button fireButton;

fireButton.onClick.AddListener (OnButtonDown);

În afara funcției “Start” vom adăuga:

GameObject bullet = Instantiate(Resources.Load("bullet", typeof(GameObject))) as GameObject;

Rigidbody rb = bullet.GetComponent<Rigidbody>();

bullet.transform.rotation = Camera.main.transform.rotation;

bullet.transform.position = Camera.main.transform.position;

rb.AddForce(Camera.main.transform.forward * 500f);

Destroy (bullet, 3);

Înștiințarea proiectilului, adăugând forța asupra lui și distrugând-ul după 3 secunde

GetComponent<AudioSource> ().Play ();

Va rula sunetul laser-ului

Acum trebuie să creăm un “prefab” al proiectilului/ glonțului.

Click Dreapta > 3D Object > Sphere pe care o vom re-denumi Bullet

Figura 5.17 – în Assets vom crea un material nou bulletMat pentru a-i schimba culoarea obiectului sfera.

Figura 5.18 – Adugarea unui nou obiect ce va avea rol de proiectil. (stânga)
Figura 5.19 – Modificarea parametrilor obiectului ce va avea rol de proiectil. (dreapta)

Adăugăm un nou script pe care il vom numi collisionScript

void OnTriggerEnter (Collider col)

{

GameObject explosion = Instantiate(Resources.Load("FlareMobile", typeof(GameObject))) as GameObject;

Când un Proiectil atinge una dintre nave va produce o explozie care este “FlareMobile” pre-fab pe care il avem în fișierul de Resurse

explosion.transform.position = transform.position;

Explozia va avea aceeași poziție precum glonțului când atinge nava

Destroy(col.gameObject);

Obiectul va fi distrus când se lovește de navă

Destroy (explosion, 2);

Explozia va fi distrusă după 2 secunde

Destroy (gameObject);

În cele din urmă glonțul va fi distrus.

GameObject enemy = Instantiate(Resources.Load("nava", typeof(GameObject))) as GameObject;

GameObject enemy1 = Instantiate(Resources.Load("nava1", typeof(GameObject))) as GameObject;

GameObject enemy2 = Instantiate(Resources.Load("nava2", typeof(GameObject))) as GameObject;

GameObject enemy3 = Instantiate(Resources.Load("nava3", typeof(GameObject))) as GameObject;

Odata ce am distrus cele 4 nave, jocul va căuta orice obiect cu etichetă Player iar dacă nu găsește nimic, va restarta toate cele 4 nave.

5.3.6 Elemente de animație

Assets > Import Package > ParticleSystems

Aceasta ne va permite ca atunci când tragem catre nava, odata ce “Glonțul” atinge nava va înștiința “Flare” pre-fab și va arăta precum nava care va exploda.

Figura 5.20 – Fereastra Elemente de animație

Duplicarea inamicilor pentru o experiență mai dificilă și imersivă.

Figura 5.21 – Preznetarea navelor spatiale in Unity.

Concluzii

Unity este o platformă flexibilă și puternică în dezvoltarea jocurilor 2D și 3D. Aplicația este un punct bun de pornire pentru realizarea unui joc mai complex din punct de vedere al acțiunilor, grad de dificultate și al nivele.

Avantajele folosirii Unity :

Platforma poate fi descarcată și utilizată gratis

Poate fi utilizată de începători

Unity pune la dispoziție pachete de resurse

Crează aplicații portabile pe o multime de platforme

Dezavantaje folosirii Unity:

Nu există template-uri, fiecare proiect trebuie început de la 0 dacă nu ai resursele necesare. Din punct de vedere grafic, Unity este mai slab decât UDK (Unreal Development Kit).

BIBLIOGRAFIE

http://docs.unity3d.com/Manual/index.html

https://unity3d.com/learn/tutorials/modules

Steve Aukstakalnis “ Practical Augmented Reality: A Guide to the Technologies, Applications, and Human Factors for AR and VR (Usability)”

Erin Pangilinan (Author), Steve Lukas (Author), Vasanth Mohan (Author) “Creating Augmented and Virtual Realities: Theory and Practice for Next-Generation Spatial Computing 1st Edition”

Jesse Glover and Jonathan Linowes “Virtual Reality and Augmented Reality Development with Unity: Leverage the power of Unity and become a pro at creating mixed reality applications“

Dawid Borycki „Programming for Mixed Reality with Windows 10, Unity, Vuforia, and UrhoSharp“

Micheal Lanham „Learn ARCore – Fundamentals of Google ARcore“

Armaș Ioana. Robotică socială. Modele inovative și conștiență. Editura AGIR, București, 2016, 304 pag..

Similar Posts