Proiectarea Si Implementarea Unui Joc 3d

Proiectarea și implementarea unui joc 3D

Cuprins

Cuprins

Capitolul 1. Introducere

Capitolul 2. Unity 3D

2.2. Principalele caracteristici

2.3. Principalele elemente ale interfeței

2.3.1. Project

2.3.2. Inspector

2.3.3. Hierarchy

2.3.4. Toolbar

Capitolul 3. Unelte și funcții folosite

3.1 Crearea unui proiect nou

3.2. Crearea suprafeței de joc

3.2.1. Crearea suprafeței folosind formele geometrice

3.2.2. Crearea automată a suprafeței de joc

3.3. Luminarea scenei

3.3.1. Lumina direcțională

3.3.2. Lumina de tip punct

3.3.3. Lumina de tip spot

3.4. Crearea caracterului

3.5. Script-uri

3.6. Importarea obiectelor

3.7. Adăugarea sunetului

3.7.1. Proprietățile fișierelor audio

3.7.2. Audio listener

3.7.3.1. Propietățile de bază ale componentei

3.7.3.2. Setări 3D

3.7.3.3. Setări 2D

Capitolul 4. Implementarea jocului

4.1. Crearea unui nou proiect

4.2. Crearea suprafeței de joc

4.3. Luminarea scenei

4.4. Crearea caracterului

4.4.1. Controler-ul de caracter

4.4.2. Modelul 3D

4.3. Dezvoltarea Animațiilor

4.5. Scripts

4.6. Adăugarea sunetului

Capitolul 5. Concluzii

Bibliografie

Capitolul 1. Introducere

Tema acestei lucrări de licență este dezvoltarea unui joc 3D de tip FPS care va încerca atât să simuleze cât mai bine realitatea cât și să ofere utilizatorului posibilitatea de a intra cât mai bine în pielea personajului principal.

Acest tip de joc se poate spune că face parte din categoria jocurilor simulatoare. Spre deosebire de restul jocurilor în care utilizatorul are o perspectivă întreagă a jocului, în acest caz utilizatorul va avea acces doar la ce va vedea prin intermediul ”ochilor” caracterului principal. Utilizatorul va controla doar acest caracter, restul desfășurându-se în mod automat.

Mediul de dezvoltare ales pentru elaborarea acestui joc este Unity 3D deoarece acest software are și o variantă gratuită care oferă acces limitat asupra componentelor și utilizaților mediului de dezvoltare, dar suficiente pentru a pune bazele unui joc.

Pe lângă varianta gratuită a mediului de dezvoltare, Unity mai oferă și o documentație în detaliu a fiecărei componente. Acest mediu înregistrează o ascensiune foarte mare, deja existând 500.000 de jocuri care au fost dezvoltate cu Unity 3D, având reale șanse să devină unul dintre mediile de top a dezvoltării jocurilor.

Nu în ultimul rând am ales acest mediu și în urma prezentărilor care s-au facut la universitatea noastră de către domnul Jordi Linares de la Universitatea din , Spania.

Figura 1. 1 Unity 3D

Capitolul 2. Unity 3D

2.1. Introducere

Unity 3D este un mediu de dezvoltare jocuri sau animații 3D în timp real. Mediul de dezvoltare Unity rulează atât pe sistemul de operare Windows cât și pe Mac OS X, iar jocurile dezvoltate cu ajutorul lui Unity pot fi rulate pe Windows, Mac, Xbox 360, PlayStation 3, Wii , iPad, iPhone, Android și odată cu Unity 3D 4.0 va fi posibilă crearea de jocuri sau animații 3D și pentru Linux.

De asemenea pot fi create și jocuri pentru browser care dispun de plugin-ul Unity web player atât pe sistemul de operare Windows cât si pe MAC. De asemenea web player-ul este folosit și pentru implementarea widgets-urilor pentru sistemul de operare Mac.

Folosind mediu de dezvoltare Unity se pot exporta jocuri pentru funcția Adobe Stage 3D in Flash , dar datorită limitărilor acestui limbaj de programare unele funcționalități nu sunt disponibile.

Unity a ajuns să fie folosit deja de un numar impresionant de jocuri, 500.000 . Acest fapt s-ar putea datora și avantajelor din punct de vedere financiar pe care acest mediu de dezvoltare îl oferă. Costurile de achiziție a acestui soft pentru a putea dezvolta și comercializa jocuri este relativ scăzut în comparație cu alte soft-uri de acest gen . De asemenea oferă și versuni gratuite care sunt aproape complete, așadar noii inițializați pot sa ajungă la un nivel destul de avansat folosind doar versiunea gratuită.

În figura 2.1 avem prezentat mediul de dezvoltare Unity 3D.

Figura 2. 1 Unity 3D

Unity oferă un avantaj major prin intregrarea unui editor pentru dezvoltarea și crearea design-ului cu un mediu de creare a jocurilor numit”game engine”. Asemenea tradițional unui motor care face ca o mașină să funcționeze, acest ”game engine” face ca jocul să funcționeze. Mediul de dezvoltare a jocurilor oferit de compania Unity Technologies este asemănător cu Director, Blender game engine, Virtools, Torque Game Builder și Gamestudio, care de asemenea include un mediu grafic de dezvoltare ca primă metodă.

Datorită faptului că sunt puține companii de dezvoltare a jocurilor care au ca și țintă sistemul de operare Linux, Unity a confirmat că odată cu Unity 4.0 va fi posibilă exportarea jocurilor și pe Linux.

Dezvoltatorul inXile Entertainment va fi unul din primii care va crea jocuri destinate platformei Linux folosindu-se de Unity, jocul se va numi Wasteland 2. Unity a oferit acestui dezvoltator o versiune încă beta de exportare pe Linux.

2.2. Principalele caracteristici

Obiectele importate în Unity sunt automat actualizate. Unity permite integrarea obiectelor dezvoltate în medii de dezvoltare 3D precum 3ds Max, Maya, Softimage, Blender, Modo, ZBrush, Cinema 4D, Cheetah3D, Photoshop, Adobe Fireworks.

 Motorul grafic a celor de la Unity folosește Direct3D (Windows), OpenGL (Mac, Windows), OpenGL ES (iOS, Android), API-uri speciale (Wii), vezi figura 2.2.

Datorită variantei open-source, Mono, a .NET Framework programatorii pot să folosească script-uri pentru a controla obiectele.

Limbajele de programare folosite pentru a crea Unity Script-uri sunt : C#, Java, Boo (care are o sintaxă inspirată din limbajul Python ).

Unity are și un sistem audio intregat care poate să includă sunetele direct fără a mai fi nevoie de un program suplimentar (cum ar fi cazul mediului de dezvoltare 3ds Max).

Un motor de creare a vegetației și tipuri de teren.

Folosind Raknet se pot crea și jocuri în rețea cu posibilitatea de a fi jucat de mai mulți utilizatori.

Nu în ultimul rând caracteristica cea mai importantă a acestui mediu de dezvoltare este faptul că este necesară crearea o singură dată a unui proiect, iar apoi poate fi exportat pe diferite platforme fără a mai fii nevoie de cunoștințe suplimentare.

Figura 2. 2 Platforme posibile pentru exportare

2.3. Principalele elemente ale interfeței

Interfața grafică, prezentată în figura 2.3, creată de Unity este asemănătoare programelor care utilizează grafica 3D. În centru este ca de obicei scena curentă pe care dezvoltatorul o creează sau o modifică. Cele mai utilizate tab-uri sunt următoarele:

Project – care ne arată de fapt ce conține proiectul (scene, modele 3D, materiale, script-uri, texturi etc.)

Inspector – care prezintă utilizatorului toate proprietățile obiectului selectat, de la materiale, texturi până la script-uri, umbre, etc.

Hierarchy care conține toate obiectele din scena curentă. Toate obiectele din tab-ul Hierarchy trebuie neapărat să se găsească importate în proiect(fapt care este semnalat prin prezența lor în tabul project).

În partea de sus în mod obișnuit se află Toolbar.

Figura 2. 3 Intefața Unity

2.3.1. Project

Unele obiecte chiar dacă se află în tabul project nu trebuie neapărat să se găsească în scena curentă. Chiar dacă utilizatorul copiază de exemplu o textură manual, tab-ul project va fi actualizat automat.

De asemenea modul de organizare a fișierelor rămâne decizia utilizatorului. Fiecare proiect va conține însă un dosar pentru asset-uri. Aceste asset-uri sunt bine să fie relocate folosind interfața programului și nu din sistemul de operare, astfel eliminându-se posibilitatea pierderii de metadate.

Fiecare scenă poate fi văzută ca și un nivel al jocului. Ordinea acestor scene va trebui specificată exact la crearea efectivă a jocului pentru a urma cursul normal. Programatorul poate însă să treacă de la o scenă la alta chiar dacă nu este în ordinea firească, în funcție de anumite evenimente.

Figura 2. 4 Project

După cum se poate observa în figura 2.4 principalele elemente care se pot crea din interfața programului sunt: dosare, script-uri (Java, C#, Boo), umbre, animații, materiale, texturi.

2.3.2. Inspector

Figura 2. 5 Tab-ul Inspector

În figura 2.5 se poate observa tab-ul inspector care prezintă în detaliu toate componentele camerei principale. Unity face distincție clară între un element al unei scene și componentele acelui element. După cum se poate observa în figura de mai sus camera are asociat de asemenea un sunet, un script care determină camera să urmărească o țintă prestabilită, animația camerei, etc.

Interfața acestui tab oferă posibilitatea utilizatorului să modifice foarte multe proprietăți doar din modul grafic. Chiar și variabilele globale care se află în script se pot modifica fără ca acest script să fie modificat din editorul Mono.

Chiar și când jocul este rulat în modul virtual a programului, anumite variabile se pot schimba din interfață, iar această modificare se va sesiza instantaneu fără a fi necesar repornirea scenei. După ce simularea scenei este oprită variabilele modificate vor lua valoarea inițială.

Anumite componente se pot atașa unui model și ulterior pot sa fie dezactivate fără a fi înlăturate. Unity oferă acest avantaj pentru a oferi flexibilitate utilizatorului pentru a încerca diverse situații.

2.3.3. Hierarchy

Acest tab conține toate elementele care se află în scena curentă. Toate aceste obiecte trebuie să fie coținute de asemenea și în tab-ul project cu excepția unuia singur: camera principală. Această cameră principală nu trebuie importată ca orice alt asset. Într-o singură scenă pot fi una sau mai multe camere, dar măcar una singura care este creată automat pentru fiecare scenă.

Figura 2. 6 Obiecte de tip părinte

În figura 2.6 avem prezentat conceptul de ”părinte”. În partea din dreapta a figurii se pot observa că cele două obiecte sunt independente unul față de celălalt. În partea stângă a figurii ne este sugerat că obiectul de rang inferior este fiul obiectului de rang superior. Obiectul de tip ”fiu” moștenește proprietățile obiectului de tip părinte. Animația obiectului de tip ”fiu” va fi de asemnea moștenită.

Acest concept este foarte avantajos deoarece de multe ori obiectele pot să semene între ele și decât să fie tratat fiecare în parte e mai avantajos să fie tratate ca și un grup.

2.3.4. Toolbar

Figura 2. 7 Toolbar

Această componentă, prezentată în figura 2.7, în mod standard este puțin încărcată oferind în principal 5 componente principale care controlează părți separate a interfeței:

– uneltele de transformare care pot fi folosite în modul ”Scenă” Unity oferă utilizatorului două tipuri de vizualizare a proiectului : Scene si Game. Primul buton este pentru selectarea obiectelor asupra cărora se dorește a fi aplicată una din următoarele transformări, prezentate în figura 2.8 : translatare, rotire, scalare.

Translatarea se poate face pe o singură axă, pe două sau pe trei. Rotirea se face pe o axă. Scalarea se face pe o axă sau pe toate cele trei pentru a obține o scalare uniformă.

Figura 2. 8 Principalele transformări

– se folosesc aceste funcții pentru a schimba modul de vizualizare a scenei

– se controlează simularea jocului: butonul de play pornește simulare, pause o suspendă , iar al treilea buton execută simularea pas cu pas

– stabilește care obiecte sunt afișate în modul ”Scene”

– controlează aranjarea modurilor de vizualizare

În plus față de aceste unelte Unity mai oferă utilizatorului avantajul de a efectua o reglare precisă a camerei prin introducerea unei fereste în colțul din dreapta jos a imaginii scenei care constă din cadrele surprinse de camera principală.

Figura 2. 9 Camera Preview

Imaginile surprinse de camera principală vor fii cele randate și care vor face parte din produsul final, vezi figura 2.9.

Capitolul 3. Unelte și funcții folosite

3.1 Crearea unui proiect nou

Creare unui proiect nou se face în mod tipic ca și la orice alt program prin accesarete face pe o singură axă, pe două sau pe trei. Rotirea se face pe o axă. Scalarea se face pe o axă sau pe toate cele trei pentru a obține o scalare uniformă.

Figura 2. 8 Principalele transformări

– se folosesc aceste funcții pentru a schimba modul de vizualizare a scenei

– se controlează simularea jocului: butonul de play pornește simulare, pause o suspendă , iar al treilea buton execută simularea pas cu pas

– stabilește care obiecte sunt afișate în modul ”Scene”

– controlează aranjarea modurilor de vizualizare

În plus față de aceste unelte Unity mai oferă utilizatorului avantajul de a efectua o reglare precisă a camerei prin introducerea unei fereste în colțul din dreapta jos a imaginii scenei care constă din cadrele surprinse de camera principală.

Figura 2. 9 Camera Preview

Imaginile surprinse de camera principală vor fii cele randate și care vor face parte din produsul final, vezi figura 2.9.

Capitolul 3. Unelte și funcții folosite

3.1 Crearea unui proiect nou

Creare unui proiect nou se face în mod tipic ca și la orice alt program prin accesarea meniului File->New Project. Unity încă de la crearea proiectului oferă utilizatorului posibilitatea de a adăuga anumite pachete prestabilite cât și a unora care au fost folosite și în alte proiecte. Figura 3.1 prezintă grafic tipul de importare a pachetelor de elemente la crearea proiectului:

Figura 3. 1 Crearea uni proiect nou

La crearea unui proiect gol apare doar spatiul virtual, care este teoretic infinit. Un singur obiect se generează automat la crearea fiecărui proiect și anume camera principală. Această cameră poate fii inlocuită sau înlăturată ulterior.

Obiectul camera nu se poate importa, el fiind tip prestabilit, spre deosebire de alte medii de dezvoltare 3D care dispun de mai multe tipuri de camere. Câmpul vizual și distanța la care camera încă mai percepe obiectele camerei se pot modifica în funcție de necesitățile dezvoltatorului care astfel poate să simuleze un tip real de cameră de filmat.

3.2. Crearea suprafeței de joc

Crearea suprafeței de joc se poate face în două moduri: prin crearea unei figuri geometrice (2d sau 3d) sau prin accesarea meniului Terrain -> Create Terrain, creându-se astfel un obiect cu proprietățile specifice unei suprafețe de joc.

3.2.1. Crearea suprafeței folosind formele geometrice

Prima variantă este una mai rudimentară, dar oferă utilizatorului o flexibilitate mai mare. Folosind această variantă trebuie să se urmeze următorii pași:

Se creează suprafața de joc prin introducerea în scenă a uneia sau mai multor figuri geometrice. Figurile pot fi atat 2D cat și 3D și de preferat să fie unite între ele pentru a se comporta ca și un singur obiect. După ce au fost adăugate aceste obiecte tot nu avem încă o suprafață de joc deoarece acestea sunt interpretate doar ca figuri geometrice, iar dacă orice este pus pe această suprafață care este definită cu proprietăți de greutate sau forțe de coliziune, ar cădea în gol până la infinit. Acest pas este prezentat grafic în figura 3.2 .

Figura 3. 2 Crearea suprafeței de joc

Acest pas este foarte important deoarece dă ”duritate” acestor obiecte. Se selectează meniul Component->Physics->Mesh Collider, figura 3.3 prezintă grafic acest lucru, astfel tot ce va intra în contact cu suprafața acestor obiecte vor întâmpina o rezistență teoretic infinită. Chiar dacă aceasta suprafață de joc pare să plutească în aer, ea se va comporta ca o adevărată ”podea” pentru toate obiectele ce vor fi introduse.

Figura 3. 3 Interacțiunea cu celelalte obiecte

După ce au fost urmați primii doi pași se poate trece la modelarea suprafeței de joc în funcție de dorințele utilizatorului, figura 3.4.

Figura 3. 4 Modelarea suprafeței

3.2.2. Crearea automată a suprafeței de joc

Unity oferă utilizatorilor un tip de obiect numit terrain care arată ca și un plan, dar are proprietățile specifice unei suprafețe de joc. Spre deosebire de metoda anterioară, acest tip de obiect nu mai necesită adăugarea unor componente secundare. În plus acest tip de obiect oferă numeroase avantaje care ușurează semnificativ munca dezvoltatorului :

se poate modifica adâncimea și înălțimea suprafeței în anumite puncte, sub diverse forme

se pot retușa aceste modificări prin selectarea modului fin

se poate atribui o anumită textură suprafeței

se pot adăuga copaci

se poate adaugă iarbă, pietre, plante și alte obiecte mici

se pot seta în mod amănunțit opțiunile de mai sus

Figurile 3.5 si 3.6 prezintă opțiunile de mai sus, opțiuni care se pot adăuga, modifica, seta direct prin interfața mediului de dezvoltare.

Figura 3. 5 Opțiunile oferite

Figura 3. 6 Setarea opțiunilor

3.3. Luminarea scenei

După ce a fost adăugată suprafața de joc și se încearcă simularea jocului, utilizatorul va avea surpriza că va vedea obiectele în intuneric. Acest fapt se datorează lipsei de lumină care nu este introdusă automat prin crearea unei scene, vezi figura 3.7 .

Unity 3d dispune de patru tipuri de lumini:

lumina direcțională

lumina de tip punct

lumina de tip spot

lumina pe arie

Principalele caracteristici ale unei metode de luminare a scenei sunt urmatoarele:

distanța – reprezinta distanța pe care lumina este emisa

unghiu – pentru tipurile de lumină care nu au lungimea infinită trebuie specificat și raza de acțiune a luminii

culoare – este culoarea pe care utilizatorul o alege pentru lumină

intensitatea – reprezintă intensitatea luminii

masca – poate fi o textură care ne va oferi o lumină de o anumită formă pe care o alege utilizatorul.

Figura 3.7 Luminarea scenei

3.3.1. Lumina direcțională

Acest tip de luminare oferă utilizatorului o lumina omniprezentă care va afecta toate obiectele din scenă și care se va propaga la infinit. În figura 3.8 este prezentat grafic acest tip de lumină. Dupa ce a fost selectat obiectul se va afișa și direcția în care lumina este transmisă spre obiecte.

Figura 3. 8 Lumina direcțională

Acest tip de lumină va afecta toate suprafețele obiectelor, ea fiind folosită de cele mai multe ori pentru a simula lumina soarelui sau a lunii. Lumina direcțională este cea mai simplă, ea folosește cel mai puțin puterea de calcul al procesorului grafic.

În figura 3.9 este prezentată utilizarea luminii direcțională împreună cu o mască, mască care va determina forma luminii.

Masca care se aplica luminii este o textură care trebuie să fie neapărat de forma 2D. Se poate seta dimensiunea acestei măști direct din interfața mediului de dezvoltare.

Lumina directională este folosită de cele mai multe ori pentru a simula soarele. Nu este recomandat folosirea acestui tip de lumină dacă se dorește obținerea unor efecte de lumină avansate.

Un mare avantaj este folosirea acestui tip de lumină în jocurile în care acțiunea se petrece ziua și performanța jocului este un factor foarte semnificativ deoarece dispozitivele țintă pot să nu fie atât de bine dotate din punct de vedere al resurselor fizice.

Figura 3. 9 Lumina mascată

3.3.2. Lumina de tip punct

Acest tip de iluminare va emite o lumină de la un punct central în toate direcțiile la o distanță egală cu raza stabilită. Figura 3.10 prezintă grafic lumina de tip punct.

Figura 3. 10 Lumina de tip punct

Acest tip de lumină este cel mai des întâlnit în dezvoltarea jocurilor, simulând un bec, neon, de asemenea este folosit și pentru explozii, etc. Lumina de tip punct utilizeaza procesorul grafic la un nivel mediu/acceptabil , dar umbrele generate de acest tip de lumină sunt cele mai mari consumatoare de resurse.

Datorită faptului că acest tip de lumină emite în toate părțile, pentru a putea fi mascată este nevoie de o mască de tip 3D numită și masca cubică.

Figura 3.11 prezintă acest tip de lumină atât fără mască cât și cu mască. Se poate observa faptul că s-a creat un peisaj doar cu ajutorul luminii și a unei măști.

Figura 3. 11 Lumini de tip punct simplă și mascată

3.3.3. Lumina de tip spot

Acest tip de iluminare va emite lumina doar pe o singură direcție sub forma unui con. Cele două carecteristici, unghiul și distanța, se pot seta direct din interfața și au un efect imediat asupra scenei. Figura 3.12 prezintă grafic acest tip de lumină.

Figura 3. 12 Lumina de tip spot

Acest tip de lumină este folosit mai mult pentru a obține diferite efecte, mai mult decât să lumineze propriu zis scena. De exemplu se poate crea foarte realistic un reflector sau un far de mașină care este cu leduri și nu cu bec simplu. De asemenea și acest tip de lumină poate fi mascată cu o textură care trebuie să fie neapărat de tip 2D.

În figura 3.13 se demonstrează cât de ușor se pot obține diverse efecte și modele folosind acest tip de lumină.

Figura 3. 13 Lumina de tip spot mascată

3.4. Crearea caracterului

Prima dată se alege tipul de caracter care se dorește pentru joc. Sunt două tipuri principale de caractere și anume:

FPS – jucătorul vede întreaga acțiune prin ochii caracterului principal

TPS – jucătorul își vede caracterul în întregime și vede întreaga acțiune prin intermediul camerelor situate în scenă.

Având în vedere că jocul nu folosește al doilea tip de caracter, va fi tratat doar primul tip. FPS este specific jocurilor care doresc să copieze realitatea și să ofere jucătorului posibilitatea de a-și testa abilitățile în condiții cât mai reale. În figura 3.14 este prezentată folosirea acestei unelte.

Datorită faptului că suprafața de coliziune este reprezentată printr-o capsulă nu oferă cea mai bună sau eficientă metodă dezvoltatorului care dorește să creeze un joc cât se poate de real. Cu alte cuvinte caracterul va interacționa cu mediul ca și o capsulă nu ca și caracter.

Figura 3. 14 Controlul caracterului

Principalele proprietăți a acestui tip de obiect sunt următoarele:

atașarea modelelor 3D – oferă posibilitatea de a asocia acestui obiect un alt obiect 3d care va reproduce acțiunile impuse de controler. Când va fi rulat jocul, acest controler de caracter, care apare la dezoltarea scenei, nu va mai apărea, numai modelul 3D care i-a fost atașat.

înălțimea – acestui caracter îi este asociat, în mod automat de către Unity, o suprafață de coliziuni care este sub forma unei capsule. Înălțimea acestei capsule se poate regla direct din interfață.

lățimea – și această proprietate se referă tot la dimensiunea capsulei care servește ca și suprafață de coliziune. Se poate regla din interfața mediului de dezvoltare modificând diametrul capsulei.

gradul de înclinare a pantelor – este un coeficient care limitează caracterul să poată urca pante mai mici sau egale cu limita dată. Dacă această limita nu este setată corespunzător, caracterul va putea urca și pante de 90 de grade, lucru care nu este de dorit.

gradul de înălțime – este un coeficient care limitează caracterul să urce o treaptă doar dacă această este mai aproape de pământ decât valoarea indicată.

distanța minimă de parcurs – reprezintă distanța minimă pe care caracterul trebuie sa o parcurgă pentru a produce o schimbare în poziția sa. Dacă această distanță este mai mică decât cea indicată, caracterul va rămâne pe loc. Este foarte utilă această proprietate mai ales în cazul utilizării accelerometrului, când orice mică mișcare a dispozitivului poate să influențeze în mod nedorit acțiunea.

Trebuie să se acorde mare atenție acestor proprietăți deoarece în timpul jocului suprafața de coliziune nu este vizibilă, iar setarea greșită a acestei componente poate sa inducă în eroare utilizatorul care va considera atipic comportamentul caracterului său. Un astfel de exemplu este reglarea greșită a înălțimii, iar în cazul în care se dorește intrarea în clădire pe o ușă, utilizatorul să aibă senzația că în fața caracterului se află un paravan invizibil care oprește înaintarea caracterului, vezi figura 3.15 .

Figura 3. 15 Caracteristicile principale

3.5. Script-uri

Aceste proprietăți și setări fac parte din cele de baza. Pe lângă acestea dezvoltatorul își poate defini el diverși parametri și proprietăți care sa îi asigure o animație a obiectelor cât mai apropiată de realitate.

Utilizatorul poate să importe anumite script-uri prestabilite sau poate să creeze el propriile script-uri. Pentru a crea un script și a atașa acest script unui model se urmează următorii pași:

Se creează un obiect sau se importă unul în scena curentă, asta în cazul în care acel obiect nu este deja atașat scenei. Unui singur obiect i se pot atașa mai multe astfel de script-uri. Dacă obiectul este format din unul sau mai multe obiecte de tip fiu fiecărui obiect i se pot da unul sau mai multe script-uri, vezi figura 3.16 .

Figura 3. 16 Creare obiect

Se creează un nou script, prestabilit sau creat gol, sau se pot importa astfel de scripturi. În figura 3.17 este prezentat acest proces.

Figura 3. 17 Script

După ce scriptul este modificat sau creat se selectează obiectul căruia se dorește să îi fie atașat script-ul și folosind metoda prezentată în figura de mai sus sau simplu cu drag and drop se atribuie obiectului script-ul dorit, vezi și figura 3.18.

Figura 3. 18 Drag and Drop

3.6. Importarea obiectelor

Unity va detecta în mod automat orice obiect care va fi pus în dosarul denumit Assets din proiectul curent. După ce obiectul a fost pus în acest dosar, acesta va apărea și în interfața mediului de dezvoltare în secțiunea denumită Project. Actualizarea se va face imediat după adăugare. Această metodă de adăugare a obiectelor se face prin intermediul sistemului de operare. De asemenea utilizatorul poate să mai importe obiecte folosind și interfața mediului de dezvoltare urmând următorii pași:

Se selectează dosarul unde se dorește să fie adăugat obiectul

Cu click dreapta se deschide o listă de opțiuni valabile pentru dosar

Se poate selecta atât ”Import New Asset” pentru a importa un obiect sau se poate selecta ”Import New Package”.

Opțiunea ”Import New Package” oferă utilizatorului o mare flexibilitate. În Unity găsim și conceptul de pachete de obiecte care poate să însemne câteva obiecte sau chiar proiecte întregi, începând de la simple obiecte și terminând cu cele mai complexe setări și script-uri. Această opțiune vine în ajutorul echipelor de dezvoltatori care la finalul proiectului își vor împacheta toata munca lor în astfel de pachete, iar managerul proiectului va trebui doar să importe anumite pachete. Figurile 3.19 si 3.20 prezintă grafic aceste lucruri.

Figura 3.19 Importarea obiectelor Figura 3. 20 Importarea pachetelor

3.7. Adăugarea sunetului

Orice animație 3D pentru a fi cât mai spectaculoasă pe lângă efectul vizual trebuie să ofere și un efect audio cât mai apropiat de realitate și care să amplifice trăirile. Așa cum există o serie de efecte vizuale care pot fi create cu un asemenea mediu de dezvoltare, așa pot fi create diverse efecte audio. Aceste efecte audio nu sunt chiar atât de profesionale setate precum cele audio, Unity oferă o serie de unelte audio dar principalul scop rămâne grafica.

În Unity găsim două feluri de sunete:

Sunete 2D

Sunete 3D

Această clasificare a sunetelor este foarte asemănătoare cu clasificarea imaginilor 2D și 3D. Sunetele 3D sunt mult mai bogate în informații referitoare la obiectul de care sunt legate, cum ar fi: poziția obiectului în spațiu, viteza, cât și direcția pe care a fost emis sunetul. De asemenea sunetele de tip 3D sunt foarte spectaculoase mai ales în cazul dispozitivelor care redau sunete pe mai multe canale. Figurile 3.21 și 3.22 prezintă diferența dintre cele două tipuri de sunet.

Figura 3. 11 Spectru 2D Figura 3.22 Spectru 3D

În tabelul 3.1 sunt prezentate formatele fișierelor audio suportate de Unity, care le comprima separat pentru PC și pentru dispozitivele mobile.

Formate admise

Tabel 3. 1 Formate admise de Unity

După cum putem vedea analizând datele din tabelul 3.1, Unity acceptă aproate toate formatele comune de fișier audio. Sunetul în Unity este ori nativ ori comprimat.

În mod nativ Unity folosește formatele WAV, AIFF pentru efecte audio scurte. Fișierul care conține sursa audio va fii de dimensiuni mai mari, dar când jocul va fi efectiv rulat nu va mai fi necesară decomprimarea.

În mod comprimat sursa audio va fi comprimată în unul din formatele prezentate în tabelul 3.1, în funcție de platforma destinatie. Fișierele vor avea dimensiuni mai mici, dar va fi necesară o decompresie la rularea efectivă.

În mod ideal toate fișierele audio ar fi bine să fie păstrate în mod nativ, WAV sau AIFF, pentru o mai bună claritate a sunetului care nu va fi alterat în urma comprimării și decomprimării. Din păcate în cazul jocurilor mai mult de 60% din dimensiune este compus doar de fișierele audio, deci o compresie a acestora este obsolut necesară.

3.7.1. Proprietățile fișierelor audio

Unity oferă posibilitatea setării diferitelor proprietăți ale fișierelor audio. Proprietățile fișierelor audio în Unity sunt următoarele:

Audio Format – reprezintă formatul audio care îl va avea sunetul atunci când jocul va fi rulat propriu zis. Unity dispune de două astfel de formate

Native

Compressed

3D Sound – dacă această opțiune este selectată de către utilizator, sunetul se va reda sub forma 3D. Atât Sunetul de tip mono cât și cel de tip stereo pot fi redate în mod 3D.

Force to mono – dacă acestă opțiune este selectată sunetul va fi redat doar pe un singur canal.

Load Type – reprezintă metoda folosita de Unity atunci când redă sunetele la rularea efectivă a jocului. Aceasta este de trei feluri:

Decompress on load – fișierele audio vor fi decomprimate în momentul în care acestea vor fii încărcate. Unity susține folosirea acestei metode în cazul fișierelor comprimate de dimensiuni mici pentru a evita o supraîncărcare cu fișiere care trebuie să fie decomprimate. Principalul dezavantaj al acestei metode este faptul că aceste fișiere vor ocupa de zece ori mai multa memorie decât cele care sunt păstrate comprimate, de aceea nu se recomandă folosirea acestei metode în cazul fișierelor de dimensiuni mari.

Compressed in memory – această metodă presupune păstrarea fișierelor comprimate în memorie, ele fiind decomprimate doar atunci când vor fi necesare. Metoda este recomandată pentru fișierele de dimensiuni mari cărora nu este posibilă aplicarea primei metode.

Stream from disc – această metodă presupune redarea sunetelor în mod ”stream” direct de pe memoria externă. În cazul sunetelor de o durată lungă este de recomandat utilizarea acestei metode care aduce în memoria principală doar o parte din fișier pe care o redă și va trece la următoarea. Ar fi inutil să se încarce memoria cu sunete care nu sunt folosite în acel moment sau în viitorul apropiat. Această metodă are un singur inconvenient : viteza mică a memoriei externe care în cazul jocurilor complexe din punct de vedere audio, rulate pe echipamente dotate slab din punct de vedere hardware, ar putea fi critică.

Compression – în cazul acestei proprietăți trebuie să se facă un compromis între dimensiunea dorită a fișierului audio și claritatea sunetului. Dacă se dorește o dimensiune a fișierului audio cât mai mică, iar metoda comprimarii este prea drastică, se va sesiza o pierdere semnificativă a calității sunetului. De asemenea trebuie să se țină cont și de platforma țintă și de echipamentele hardware posibile ale dispozitivului. După ce s-a efectuat o analiză amănunțită se poate înclina balanța în favoarea calității sunetului sau dimensiunii fișierului audio.

Gapless  – această opțiune este valabilă doar pentru Android si iOS. Este folosită când se dorește comprimarea fișierelor audio de dimensiuni mici care se doresc să fie redate în buclă pentru a asigura o continuare a sunetului cât mai bună fără a se sesiza începutul și sfârșitul sunetului. MPEG-urile standard introduc o mică pauză între început și sfârșit.

Figura 3. 22 Proprietăți

Pentru ca produsul final să reproducă sunetele dorite de către dezvoltator, în Unity este necesar introducerea a doua componente de bază și anume :

O componentă care să înregistreze sunetele produse

O componentă care să conțină sursa sunetului

Figura 3. 23 Componentele de baza

În figura 3.24 sunt prezentate cele două componente principale care alcătuiesc sistemul audio oferit de Unity.

În partea din dreapta a imaginii se poate observa simbolul unei cărți care are desenată pe ea un semn de întrebare, dacă se selectează acest simbol Unity va deschide automat browser-ul și va accesa o pagină care va conține informații despre acea componentă. Pentru informații mai detaliate se găsesc și în această pagină link-uri către alte pagini care vor oferi mai multe informații despre un termen.

Această documentație poate să fie accesată și de pe site-ul principal al celor de la Unity. În figura 3.25 este prezentat acest lucru.

Figura 3. 25 Documentație

3.7.2. Audio listener

Această componentă este asemănătoare unui microfon, înregistrează toate sunetele care se află la o anumită distanță de ea. De cele mai multe ori fiecărei scene ii este asociată doar o astfel de componentă pentru a evita suprapunerea sunetelor.

În mod implicit această componentă este atașată camerei principale. Indiferent de tipul jocului, întotdeauna camera se aseamănă cu ochii jucătorului, așadar toate sunetele apropiate îndeajuns de camera se vor auzi ca și cum ar fi apropiate de el.

În cazul jocurilor FPS este foarte important ca această componentă să fie atașată camerei pentru ca jucătorul să poată să intre cât mai bine în pielea personajului.

Această componentă nu are niciun fel de proprietate, ea înregistrează sunetele precum un microfon și le redă la difuzoare. Componenta funcționează în strânsă legătură cu sursa audio, astfel oferindu-i dezvoltatorului posibilitatea lucrului cu fișiere audio și efecte audio direct din mediul de dezvoltare fără a mai fi necesare soft-uri aferente.

Dacă tipul sunetului este 3D, această componentă va oferi informații complete despre poziția în spațiu a obiectului, viteza și direcția sunetului. Pentru sunete de tip 2D toate aceste proprietăți vor fi ignorate. În figura 3.26 este prezentată această componentă.

Figura 3. 26 Audio Listener

3.7.3. Audio source

Această componentă conține sunetul propriu-zis care se va auzi în scena și va fi înregistrat de componenta audio listener. Dacă sunetul este 3D intensitatea acestuia va depinde de distanța componentei de înregistrare de sunet. Pentru a crea efecte audio cât mai reale se poate aplica fiecărui sunet câte un filtru. Unity oferă sunet compatibil sistemelor 7.1 și face bariera între modul 3D si 2D.

Figura 3. 27 Audio Source

În figura 3.27 este prezentată utilizarea acestei componente. După cum se poate observa din figura de mai sus, toate proprietățile fișierelor audio pe care Unity le oferă sunt direct accesibile din interfața programului, acest lucru fiind un mare avantaj deoarece lucrul cu interfața programului este mult mai facil decât setarea acestor valori prin intermediul unor script-uri.

3.7.3.1. Propietățile de bază ale componentei

Fișierul audio – reprezintă fișierul audio care conține sunetul. Acest fișier va fii atribuit unui anumit obiect.

Modul mut – sunetul va fii redat în continuare în cadrul scenei, dar acesta va fii redat pe mut.

Bypass – este o metodă foarte bună când se dorește dezactivarea tuturor efectelor audio.

Play On Awake – dacă acestă opțiune este activată, sunetul va fii redat din momentul în care scena va fii rulata. Dacă însă opțiunea nu este activă pentru a reda acel sunet este necesar apelarea funcției Play() în cadrul unui script care va fii ulterior asociat cu sunetul dorit să fie redat.

– această opțiune va reda sunetul în continuare chiar dacă acesta ajunge la sfârșit, creându-se astfel o buclă care va fii oprită atunci când scena nu mai va fi activă.

Priority – Unity oferă utilizatorilor această opțiune pentru a stabili cu exactitate prioritatea fiecărui sunet, astfel dezvoltatorul va fi sigur că sunetele nu se vor suprapune într-un mod nedorit. Unity definește 257 de priorități diferite (de la 0, care este cea mai mare prioritate, pana la 256 , care este cea mai mică prioritate). În cazul sunetului de fundal Unity recomandă să fie folosită prioritatea ”0” pentru a nu apărea probleme precum lipsa acestui sunet chiar și pentru o scurtă perioadă. Implicit prioritatea primită de fiecare sunet este ”128”.

Volume – reprezintă volumul sunetului care va fi considerat la o unitate (un metru) de componenta Audio Listener.

Pitch – această opțiune va controla cât de repede va fi redat un sunet. Valoarea implicită este ”1” și reprezintă redarea normala a sunetului.

Acestea sunt opțiunile de bază în materie de manipulări ale sunetelor și de efecte audio pe care Unity le oferă. Aceste opțiuni nu sunt foarte profesionale dar îi oferă acestui mediu de dezvoltare un avantaj față de altele care nu dinspun nici măcar de acestea.

3.7.3.2. Setări 3D

Mediul de dezvoltare Unity oferă setări audio la un nivel mediu, ceea ce este satisfăcător pentru cei mai mulți utilizatori, iar pentru cei care doresc o înaltă definiție și efecte audio avansate vor fi nevoiți să folosească și alte soft-uri .Aceste setări vor fii aplicate doar sunetelor 3D și ignorate de cele 2D. Unity dispune de următoarele opțiuni pentru modelarea sunetelor 3D :

Pan Level – stabilește cât de mult va influența sunetul procesor de sunet 3D

Spread – stabilește unghiul la care sunetul va fi distribuit. Această opțiune se referă la difuzoarele care funcționează în regim stereo sau multicanal

Doppler Level – stabilește nivelul efectului ”doppler” care va fi aplicat sunetului. Dacă această valoare este la nivelul ”0” atunci acest tip de efect nu va fi aplicat deloc sunetului

Min Distance – reprezintă distanța în care sunetul va rămâne la fel de intens fără a fi atenuat. După depășirea acestei valori sunetul va începe să fie atenuat proporțional cu distanța. Dacă această valoare se va mări, sunetul se va auzi mai intens în spațiul 3D , iar prin reducerea acestei valori se va stabili o reducere a intensității sunetului în spațiul 3D

Max Distance – reprezintă distanța până la care sunetul continuă să fie atenuat. După depășirea acestei valori sunetul nu va mai fi atenuat, el va rămâne la o intensitate egală cu intensitatea maximă care a fost înregistrată înainte de a depăși această barieră stabilită de dezvoltator.

Rolloff Mode – reprezintă viteza cu care sunetul va fi estompat. Cu cât această valoare este mai mare cu atât componenta Audio Listener, cea care va înregistra sunetele, va trebui să fie plasată cât mai aproape de sursa sunetului. Această valoare este determinată în urma unui grafic. Acesta opțiune vine cu două variante prestabilite și încă una care oferă utilizatorului o libertate totală :

Logarithmic Rolloff – utilizând această opțiune, sunetul va fi foarte intens când componenta Audio Listener este amplasată foarte aproape de sura audio, dar va scădea în intensitate într-un mod semnificativ și foarte rapid pe măsură ce distanța dintre cele două componente crește.

Linear Rolloff – această opțiune este cea mai comună deoarece simuleaza foarte bine realitatea. Cu cât distanța dintre cele două componente va fi mai mare cu atât intensitatea sunetului va fi mai redusă, intensitatea variind direct proporțional cu distanța

Custom Rolloff – această variantă oferă utilizatorului o libertate de creație foarte mare, dar având un mare neavantaj și anume faptul că nu pot fi importate astfel de grafuri. Precizia cu care utilizatorul poate să construiască aceste grafuri este destul de mică, dar chiar și așa oferă un avantaj față de mediile de dezvoltare care nu dispun de fel de această funcționalitate.

În figura 3.28 sunt prezentate graficele prestabilite, iar în figura 3.29 cel definit de utilizator.

Figura 3. 28 Grafice prestabilite

Figura 3. 29 Grafic stabilit de utilizator

3.7.3.3. Setări 2D

Aceste setări vor fi aplicate doar sunetelor care sunt de tip 2D. În cazul sunetelor de tip 2D se poate stabili doar următoarea proprietate :

Plan 2D – va stabili cât de mult va fi afectat sunetul de procesorul de sunet. În mod implicit această valoare este setată pe valoarea ”0”. Figura 3.30 prezintă grafic setarea acestui parametru

Figura 3. 30

Capitolul 4. Implementarea jocului

În acest capitol se va implementa jocul, bineințeles urmând subcapitolele aferente capitolului 3. Acest joc va fi de tip FPS ceea ce va oferi posibilitatea utilizatorilor săi să intre cât mai bine în pielea personajului principal.

4.1. Crearea unui nou proiect

Proiectul se va crea accesând meniul File->New Project. Se vor importa aproape toate pachetele prezentate, mai puțin cele care țin de platformele mobile sau cele care fac parte din proiecte anterioare și nu sunt de folos acestui proiect. După ce sunt toate selectate, toate pachetele Unity se vor reporni, așa cum se întâmplă de fiecare dată când este creat un nou proiect.

Figura 4. 1 Proiect nou

La crearea unui nou proiect în mod implicit a fost creata și o cameră. Această cameră nu este necesară așa că cel mai bine ar fi să fie înlăturată din scenă pentru a nu se produce anumite erori în privința identității camerei principale ale jocului. Camera principala va fi stabilită după adăugarea controler-ului caracterului principal.

4.2. Crearea suprafeței de joc

Suprafața de joc se va crea folosind varianta oferită de Unity. Am ales această metodă pentru că ne oferă numeroase avantaje mai ales în cazul de față când avem nevoie doar de o ”podea” , iar restul facilitaților și obiectelor care vin la pachet cu această componentă vor fi suficiente pentru a crea un peisaj satisfăcător.

Pentru a parcurge acest pas se selectează meniul Terrain -> Create Terrain. Rezoluția implicită este de 2000 X 2000 de unități. Această rezoluție este prea mare deoarece trebuie să se țină cont și de coeficientul de performanță care trebuie atins pentru acest joc. Este inutil să avem obiecte deosebit de mari, care vor necesita mai multe resurse la rularea efectivă a jocului, dacă nu se folosește întreaga lor suprafață. Prin aceasta se rezolvă și problema aspectului, și anume nu ne dorim ca utilizatorul să se simtă ca și pe o bucată de teren care plutește în aer. Utilizând acest tip de creare a suprafeței utilizatorului i se va crea iluzia optică conform căreia suprafața ar fi infinită, el conștientizând marginea suprafeței doar când va fi lângă ea, ceea ce nu se va permite.

În figura 4.2 este prezentată componenta denumită de către Uniti teren.

Figura 4. 2 Crearea suprafeței de joc

După ce a fost creată suprafața de joc se va accesa meniul Edit->Render Settings. Unity oferă dezvoltatorului să iși creeze pe lângă o suprafață de joc și un mediu ambiant al scenei prin simulare:

norilor

ceței

luminei ambientale

cerului

anumitor măști

Figurile 4.3 și 4.4 prezintă utilizarea acestor unelte. În joc se va adăuga o simulare a cerului care va conține nori și un soare care este de fapt lumina direcțională.

Figura 4. 3 Render settings

Figura 4. 4 Simularea componentelor mediului ambiant

4.3. Luminarea scenei

În primul nivel al jocului acțiunea se va desfașura în timpul zilei, așadar ca sursă de lumină principală se va folosi lumina direcțională care va fi omniprezentă. Datorită faptului că în dezvoltarea acestui joc se folosește o variantă gratuită a acestui mediu de dezvoltare, nu se vor putea folosi efecte spectaculoase folosind luminile. Pentru a obține aceste efecte cât și umbrele aferente luminilor ar trebui achiziționat varianta profesională a acestui soft.

După ce jocul va fi funcțional, oricând se pot adăuga noi obiecte, efecte care ar putea să înbunătățească jocul, dar principalul scop este dezvoltarea acestui joc din punct de vedere funcțional și, utilizând uneltele disponibile, cât mai bine dezvoltat și din punct de vedere al imaginii.

O altă problemă în folosirea diferitelor efecte de lumini este faptul că în versiunea gratuită lumina va trece prin obiecte și va afecta tot ce este în raza de acțiune. În figura 4.3 se prezintă sursa de lumina direcțională. Direcția acestei lumini este pur orientativă, ea va lumina întreaga scena. Când va fi rulat propriu zis jocul această sursa de lumină va apărea ca un soare pe cer.

Figura 4. 5 Adăugarea unei surse de lumina

4.4. Crearea caracterului

Dat fiind tipul jocului, FPS, va trebui creat un caracter care să permită celui care va juca acest joc să intre cât mai bine în pielea personajului și de asemenea să simuleze cât mai bine realitatea.

4.4.1. Controler-ul de caracter

Unity vine în ajutorul dezvoltatorilor de jocuri cu două controlere de caracter prestabilite și anume controlere pentru jocuri de tip FPS si TPS. Controler-ul utilizat în acest joc va fi de tip FPS. Acest controler este simulat grafic printr-o capsulă. Acestei capsule nu i se vor atribui materiale și nici nu va fi vizibilă când va fi rulat efectiv jocul. Atașat acestui controler va fi și o cameră, care în cazul de față va coincide cu camera principală și ochii jucătorului.

Acest controler are implicit un fișier script care îi va permite utilizatorului să ghideze caracterul principal folosind săgețile sau grupul de taste W,A,S,D. În plus mai dispune și de o componentă care ii va permite să detecteze coliziunile. Și acestă componentă este tot sub formă de sferă, ceea ce nu va oferi dezvoltatorului coliziuni foarte reale. În figura 4.6 se poate observa acest controler.

Figura 4. 6 Controler

4.4.2. Modelul 3D

Acestui controler i se va asocia un model 3D care va fi partea grafică a caracterului principal. Având în vedere că tipul jocului este FPS nu are rost să atașăm un model care să conțină toate părțile unui om. Se vor atașa doar părțile care vor fi vizibile și anume mâinile caracterului și în plus o armă. Astfel se va obține și o performanță mai bună deoarece fiecare obiect care este adăugat în scenă va fi consumator de resurse, mai ales cele care sunt tot timpul vizibile.

Modelul 3D se va importa, el fiind deja creat cu alt program. Datorită limitărilor din punct de vedere al modelării 3D de care Unity suferă se poate alege alt program, care este dedicat doar modelării 3D, pentru a crea obiectele 3D.

În figura 4.7 se poate observa modelul 3D care este alcătuit din cele două brațe și arma caracterului.

Figura 4. 7 Model 3D

Pentru ca modelul 3D să preia toate mișcările controler-ului, acesta va trebui să moștenească toate aceste mișcări și cea mai bună metodă este prin setarea acestui model ca fiu a controler-ului. Legătura dintre cele două componente trebuie sa fie cât mai bună pentru a simula un corp adevărat, nu ne dorim să se miște corpul caracterului, care este defapt controler-ul, iar brațele împreună cu arma să rămână fixe în spațiu.

În figura 4.8 se poate observa că cele două componente formează acum doar un singur obiect, iar toate proprietățile care vor fi atribuite componentei ”părinte” se va atribui de fapt tuturor ”fiilor”.

Figura 4. 8 Legarea celor două componente

Pentru ca arma să se miște și mai exact trebuie să preia și mișcările camerei principale. Prin aceasta ne vom asigura că la mișcarea mouse-ului nu vor apărea diferențe, în materie de mișcări, între cameră, controler și modelul 3d. În figura 4.9 este prezentată ierarhia corectă a obiectelor

Figura 4. 9 Ierarhia obiectelor

4.3. Dezvoltarea Animațiilor

Pentru a prezenta acest proces cât mai bine se va lua drept exemplu animația care este asociată armei atunci când aceasta va executa o tragere. Unity oferă o astfel de unealtă pentru dezvoltarea animațiilor, care este ușor de folosit și foarte intuitivă. În figura 4.10 se prezintă această unealtă.

Figura 4. 10 Dezvoltarea animațiilor

Am ales această animație pentru că este mai simplă și foarte ușor de înțeles. În partea din stângă se pot observa parametrii care pot fi modificați în cadrul acestei animații. În partea din dreapta se va prezenta oscilația acestor parametrii în timp. Elementul esențial a acestei animații sunt cadrele semnificative din animație, trei în această situație după cum urmează:

Poziția inițiala a armei

Poziția în care reculul este maxim

Poziția în care va reveni arma

După definirea acestor cadre semnificative, Unity creează animația bazată pe aceste cadre. Ținând cont și de timpul în care se desfășoară această animație putem să accelerăm sau deccelerăm animația.

În acest mod se vor crea și restul animațiilor. După ce animația este completă se deselectează butonul de înregistrare. Unity oferă dezvoltatorului posibilitatea de a vedea animația pe care a creat-o înainte ca această să fie disponibilă în joc, prin apăsarea butonului ”Play”.

Cu cât numărul de cadre semnificative dintr-o animație este mai mare cu atât această animație are posibilitatea de a reproduce cât mai exact realitatea, pe care dezvoltatorul încearcă să o simuleze.

4.5. Scripts

Pentru a continua animația dezvoltată în subcapitolul anterior, se va prezenta implementarea script-urilor care vor face ca arma să tragă. Crearea animației nu este suficientă, este nevoie și de un script care să specifice asupra cărui obiect se va aplica animația și în ce condiții se va aplica aceasta animatie.

În acest script se vor defini ca parametrii principali, prezentați în figura 4.11, care vor fi următorii:

raza de acțiune a unui glonț

forța dezvoltată de glonț

numărul de gloanțe

numărul de încărcări disponibile

intervalul dintre două trageri

arma pentru care se vor aplica acțiunile

sunetele de tragere și reîncarcare

animațiile în cazul tragerii și reîncărcării

Figura 4. 11 Parametrii

Toți parametrii vor fi declarați global, ceea ce face ca aceștia să fie accesibili direct din interfața mediului de dezvoltare pentru viitoarele setări. Accesarea acestor parametri direct din interfață este o metodă mult mai convenabila utilizatorilor care pot imediat să observe și rezultatul produs de noile setări.

În figura 4.12 sunt prezentați parametrii disponibili direct din interfața mediului de dezvoltare.

Figura 4. 12 Interfața

Toate funcțiile se vor declara în cadrul funcției de Update a script-ului deoarece se dorește actualizarea parametrilor în timpul jocului, nu doar o inițializare a acestora atunci când jocul a început. Unity definește trei tipuri de funcții implicite:

Start() – este apelată înainte ca oricare din metodele update să fie apelate. Această funcție este apelată o singură dată.

Update() – această funcție este apelată după fiecare cadru.

Awake () – această funcție este apelată o singură dată în momentul în care script-ul a fost încărcat

Unity oferă astfel dezvoltatorilor mai multe opțiuni de încadrare a propriilor funcții, asta ținând seamă de nevoile dezvoltatorului.

Funcțiile principale, în plus față de cele implicite, vor fi:

funcția Shooter – care va face legatură între arma, animația care trebuie să fie efectuată și sunetul corespunzător. De asemenea va decrementa numărul de gloanțe disponibile în încărcător și va stabili intervalul dintre două focuri succesive. În figura 4.13 este prezentată această funcție.

Figura 4. 13 Funcție Shooter

funcția Relode – care va face de asemenea legătura între obiectul vizat, animația corespunzătoare acțiunii și sunetul aferent animației. De asemenea funcția va mai decrementa numărul de încărcătoare disponibile. În figura 4.14 este prezentată implementarea acestei funcții.

Figura 4. 14 Funcția Relode

4.6. Adăugarea sunetului

În continuarea subcapitolelor precedente se va prezenta adăugarea sunetului pentru animațiile prezentate anterior. Pentru acest lucru avem nevoie de două tipuri de sunet și anume:

primul sunet este cel a efectuării unei trageri

al doilea sunet este cel aferent a reîncărcării

Aceste sunete se pot importa folosind metoda standard de importare a unui obiect. Adăugarea sunetului se poate face direct din interfața mediului de dezvoltare. Acest procedeu este prezentat în figura 4.15.

Figura 4. 15 Adăugarea sunetelor

După ce a fost adăugat sunetul trebuie să se adauge și componentele Audio Source și Audio Listener. Prima componentă va fi adăugată armei, iar a doua componentă va fi adăugată camerei principale.

În mod asemănător se pot adăuga sunete și altor componente din cadrul scenei, creând astfel un efect mult mai realistic.

Aceste sunete nu consumă atât de mult din resursele fizice de procesare a sistemului, dar în schimb vor fi o parte semnificativă din volumul total al proiectului.

Capitolul 5. Concluzii

În concluzie este ușor de elaborat un joc folosind mediul de dezvoltare Unity 3D care oferă utilizatorilor săi numeroase avantaje începând cu posibilitatea adăugării sunetelor direct din interfață, modelare 3D, unelte și pachete prestabilite care au scopul de a ajuta dezvoltatorul să pună bazele proiectului său.

Jocurile rămân în continuare o adevărată provocare pentru orice dezvoltator ele fiind considerate, în cele mai multe cazuri, produsele software cele mai complexe. Având în vedere acest lucru că am reușit să imi stabilesc noi provocări și cel mai important să reușesc finalizarea proiectului.

Dezvoltarea jocurilor utilizand Unity 3D mai are încă un mare, foarte mare avantaj: este de ajuns ca jocul să fie finalizat o singură dată fără a ține cont de platforma țintă, iar după aceea Unity preia controlul când vin vorba de exportarea proiectului pe diferite platforme, fără a mai avea nevoie de cunoștințe specifice despre fiecare platformă în parte. Doar în cazul platformelor mobile trebuie să se țină cont puțin mai mult de performanțele fizice ale componentelor ce compon aceste sisteme.

Unity 3D este un game engine care cu ușurință se situează în top 10 din întreaga lume, deseori îl găsim chiar și în top 5. Aceste game engine-uri se aleg și în funcție de jocul care se dorește să fie creat și mai ales pe caracteristica pe care se dorește să se pună accentul: realitate, performanță, claritate, diversitate.

Peste 500.000 de jocuri au fost deja create folosind acest mediu, și acum s-a mai adăugat încă unul la acest lung șir, astfel făcându-mă să mă simt aproape de cei mai buni dezvoltatori de top și oferindu-mi plăcerea de a folosi o tehnologie de ultimă generație.

Este tot mai greu sa ținem pasu cu tehnologia, de aceea oferirea unei variante gratuite a soft-ului alături de o documentație cât mai detaliată va oferi un real avantaj acestor tipuri de medii de dezvoltare, care vor fi alese tot mai mult deoarece oricărui dezvoltator îi este mai ușor să folosească ceva ce deja cunoaște.

Bibliografie

[1]. New Trends in and Web Development, 2012

[2]. Unity 3D Game Development by Example Beginner's Guide, Ryan Henson Creighton  (Sep 24, 2010)

[3]. Unity 3.x Game Development by Example Beginner's Guide by Ryan Henson Creighton (Sep 23, 2011)

[4]. Unity 3.x Game Development Essentials by Will Goldstone (Dec 20, 2011)

[5]. Game Development with Unity by Michelle Menard (Jan 19, 2011)

Unity descriere – http://en.wikipedia.org/wiki/Unity_(game_engine) , consultat la 6.07.2012

Imagine Unity : http://www.windowsphonedaily.com/2012/03/unity3d-comes-to-windows-phone-thanks.html, consultat la 6.07.2012

Imagine Unity 3.5.5 – http://unity3d.com/unity/download/, consultat la 6.07.2012

Platforme Unity – http://www.mobiletechworld.com/2012/08/22/unity-3d-engine-support-for-windows-phone-8-announced/, consultat la 6.07.2012

Interfață – http://docs.unity3d.com/Documentation/Manual/LearningtheInterface.html, consultat la 6.07.2012

Imagine Interfață – http://docs.unity3d.com/Documentation/Manual/LearningtheInterface.html, consultat la 8.07.2012

Toolbar imagine – http://docs.unity3d.com/Documentation/Manual/LearningtheInterface.html, consultat la 8.07.2012

Imagini surprinse de cameră : Imaginea a fost preluată de pe site-ul: http://docs.unity3d.com/Documentation/Manual/LearningtheInterface.html, consultat la 10.07.2012

FPS joc – http://unity3d.com/support/resources/tutorials/fpstutorial, consultat la 11.07.2012

Crearea unei suprafețe – http://docs.unity3d.com/Documentation/Components/terrain-UsingTerrains.html, consultat la 11.07.2012

Collider – http://docs.unity3d.com/Documentation/ScriptReference/Collider.html, consultat la 15.07.2012

Lumini – http://docs.unity3d.com/Documentation/Components/class-Light.html, consultat la 16.07.2012

Lumina Direcțională imagine- http://docs.unity3d.com/Documentation/Components/class-Light.html, consultat la 17.07.2012

Lumina de tip spot – http://docs.unity3d.com/Documentation/Components/class-Light.html, consultat la 20.07.2012

Lumina de tip punct – http://docs.unity3d.com/Documentation/Components/class-Light.html, consultat la 21.07.2012

Controlul caracterului – http://docs.unity3d.com/Documentation/Components/class-CharacterController.html, consultat la 22.07.2012

Controler imagine – http://docs.unity3d.com/Documentation/Components/class-CharacterController.html, consultat la 22.07.2012

Scripts – http://docs.unity3d.com/Documentation/Manual/Scripting.html, consultat la 24.07.2012

Importarea obiectelor – http://docs.unity3d.com/Documentation/Manual/ImportingAssets.html, consultat la 24.07.2012

Sunet – http://docs.unity3d.com/Documentation/Manual/Sound.html, consultat la 24.07.2012

Spectru 3d – http://donrathjr.com/basic-characteristics-of-sound/, consultat la 28.07.2012

Spectru 2d – http://www.palmsounds.net/2010/10/led-spectrum-analysis-free.html, consultat la 02.08.2012

Tabel formate audio – http://docs.unity3d.com/Documentation/Manual/AudioFiles.html, consultat la 10.08.2012

Bypass – http://en.wikipedia.org/wiki/Bypass_(audio) , consultat la 12.08.2012

Efectul Doppler – http://en.wikipedia.org/wiki/Doppler_effect, consultat la 12.08.2012

Rolloff – http://en.wikipedia.org/wiki/Rolloff, consultat la 12.08.2012

Audio Listener – http://docs.unity3d.com/Documentation/Manual/Sound.html, consultat la 15.08.2012

Audio Source – http://docs.unity3d.com/Documentation/Manual/Sound.html, consultat la 15.08.2012

Bibliografie

[1]. New Trends in and Web Development, 2012

[2]. Unity 3D Game Development by Example Beginner's Guide, Ryan Henson Creighton  (Sep 24, 2010)

[3]. Unity 3.x Game Development by Example Beginner's Guide by Ryan Henson Creighton (Sep 23, 2011)

[4]. Unity 3.x Game Development Essentials by Will Goldstone (Dec 20, 2011)

[5]. Game Development with Unity by Michelle Menard (Jan 19, 2011)

Unity descriere – http://en.wikipedia.org/wiki/Unity_(game_engine) , consultat la 6.07.2012

Imagine Unity : http://www.windowsphonedaily.com/2012/03/unity3d-comes-to-windows-phone-thanks.html, consultat la 6.07.2012

Imagine Unity 3.5.5 – http://unity3d.com/unity/download/, consultat la 6.07.2012

Platforme Unity – http://www.mobiletechworld.com/2012/08/22/unity-3d-engine-support-for-windows-phone-8-announced/, consultat la 6.07.2012

Interfață – http://docs.unity3d.com/Documentation/Manual/LearningtheInterface.html, consultat la 6.07.2012

Imagine Interfață – http://docs.unity3d.com/Documentation/Manual/LearningtheInterface.html, consultat la 8.07.2012

Toolbar imagine – http://docs.unity3d.com/Documentation/Manual/LearningtheInterface.html, consultat la 8.07.2012

Imagini surprinse de cameră : Imaginea a fost preluată de pe site-ul: http://docs.unity3d.com/Documentation/Manual/LearningtheInterface.html, consultat la 10.07.2012

FPS joc – http://unity3d.com/support/resources/tutorials/fpstutorial, consultat la 11.07.2012

Crearea unei suprafețe – http://docs.unity3d.com/Documentation/Components/terrain-UsingTerrains.html, consultat la 11.07.2012

Collider – http://docs.unity3d.com/Documentation/ScriptReference/Collider.html, consultat la 15.07.2012

Lumini – http://docs.unity3d.com/Documentation/Components/class-Light.html, consultat la 16.07.2012

Lumina Direcțională imagine- http://docs.unity3d.com/Documentation/Components/class-Light.html, consultat la 17.07.2012

Lumina de tip spot – http://docs.unity3d.com/Documentation/Components/class-Light.html, consultat la 20.07.2012

Lumina de tip punct – http://docs.unity3d.com/Documentation/Components/class-Light.html, consultat la 21.07.2012

Controlul caracterului – http://docs.unity3d.com/Documentation/Components/class-CharacterController.html, consultat la 22.07.2012

Controler imagine – http://docs.unity3d.com/Documentation/Components/class-CharacterController.html, consultat la 22.07.2012

Scripts – http://docs.unity3d.com/Documentation/Manual/Scripting.html, consultat la 24.07.2012

Importarea obiectelor – http://docs.unity3d.com/Documentation/Manual/ImportingAssets.html, consultat la 24.07.2012

Sunet – http://docs.unity3d.com/Documentation/Manual/Sound.html, consultat la 24.07.2012

Spectru 3d – http://donrathjr.com/basic-characteristics-of-sound/, consultat la 28.07.2012

Spectru 2d – http://www.palmsounds.net/2010/10/led-spectrum-analysis-free.html, consultat la 02.08.2012

Tabel formate audio – http://docs.unity3d.com/Documentation/Manual/AudioFiles.html, consultat la 10.08.2012

Bypass – http://en.wikipedia.org/wiki/Bypass_(audio) , consultat la 12.08.2012

Efectul Doppler – http://en.wikipedia.org/wiki/Doppler_effect, consultat la 12.08.2012

Rolloff – http://en.wikipedia.org/wiki/Rolloff, consultat la 12.08.2012

Audio Listener – http://docs.unity3d.com/Documentation/Manual/Sound.html, consultat la 15.08.2012

Audio Source – http://docs.unity3d.com/Documentation/Manual/Sound.html, consultat la 15.08.2012

Similar Posts