Licenta Gal Iulian 3 [630234]
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ ȘI
TEHNOLOGIA INFORMAȚIEI
PROGRAMUL DE STUDIU TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT ZI
Proiect de diplomă
COORDONATOR ȘTIINȚIFIC
Conf. Dr. Ing. Ovidiu Constantin Novac
ABSOLVENT: [anonimizat]
2018
UNIVERSITATEA DIN ORADEA
FACULTATEA DE INGINERIE ELECTRICĂ ȘI
TEHNOLOGIA INFORMAȚIEI
PROGRAMUL DE STUDIU TEHNOLOGIA INFORMAȚIEI
FORMA DE ÎNVĂȚĂMÂNT ZI
IMPLEMENTAREA UNUI JOC DE TIP
BATTLE FOLOSIND UNITY 3D
COORDONATO R ȘTIINȚIFIC
Conf. Dr. Ing. Ovidiu Constantin Novac ABSOLVENT: [anonimizat]
2018
UNIVERSITATEA DIN ORADEA
FACULTATEA de Inginerie Electrică și Tehnologia Informației
DEPARTAME NTUL DE CALCULATOARE ȘI TEHNOLOGIA
INFORMAȚIEI
TEMA ____ ____
Proiectul de Finalizare a studiilor a student: [anonimizat]: Gal Iulian Bogdan
1). Tema lucrării de finalizare a studiilor: Implementarea unui joc de tip bat tle folosind
Unity 3 D
2). Termenul pentru preda rea proiectului: 5 septembrie 2018
3). Elemente inițiale pentru elaborarea proiectului de finalizare a studiilor: Unity 3D,
Blender , C#, Javascript, Photoshop.
4). Conținutul lucrării de finalizare a studiilor: Introducere, Tehnologii folosite, Prezentare a
aplicației , Concluzii, Bibliografie .
5). Material grafic: Asset Store
6). Locul de documentare pentru elaborarea lucrării: Laboratoarele facultății de Inginerie
Electrică și Tehnologia Informației, Internet, biblioteca Universității din Oradea
7). Data emiterii temei: 1 octombrie 2017
Coordonator științific,
Conf. Dr. Ing. Ovidiu Constantin Novac
Cuprins
I. Introducere ………………………….. ………………………….. ………………………….. ……………….. 5
I.1. Istoric ………………………….. ………………………….. ………………………….. ………………………. 5
I.2. Tema propusă ………………………….. ………………………….. ………………………….. …………… 6
I.3. Motivul alegerii temei ………………………….. ………………………….. ………………………….. .. 6
I.4. Descrierea jocului ………………………….. ………………………….. ………………………….. ……… 6
II.5. Descrierea lucrării ………………………….. ………………………….. ………………………….. ……. 7
II. Tehnologii utilizate ………………………….. ………………………….. ………………………….. …….. 8
II.1. Introducere ………………………….. ………………………….. ………………………….. ……………… 8
II.2. Unity 3D ………………………….. ………………………….. ………………………….. …………………. 8
II.2.1. Luminile ………………………….. ………………………….. ………………………….. …………. 11
II.2.2. Camera ………………………….. ………………………….. ………………………….. …………… 13
II.2.3. Materiale, Shadere și Texturi ………………………….. ………………………….. …………. 14
II.2.4. Motorul de teren (Terrein Engine) ………………………….. ………………………….. ….. 14
II.2.5. Editorul de copaci ………………………….. ………………………….. ………………………… 15
II.2.6. Sistemul de particule ………………………….. ………………………….. …………………….. 16
II.2.7. Funcții avansate de randa re ………………………….. ………………………….. ……………. 17
II.2.8. Interfața cu utilizatorul (UI) ………………………….. ………………………….. …………… 18
II.2.9. Audio ………………………….. ………………………….. ………………………….. ……………… 19
II.2.10. Coliziuni ………………………….. ………………………….. ………………………….. ……….. 20
II.2.11. Scripturi ………………………….. ………………………….. ………………………….. ………… 21
II.3. MonoDevelop ………………………….. ………………………….. ………………………….. ……….. 21
II.4. Microsoft Visual Studio ………………………….. ………………………….. ……………………… 22
II.4.1. Limbajul C# ………………………….. ………………………….. ………………………….. ……. 22
II.4.2. Limbajul JavaScript ………………………….. ………………………….. ……………………… 23
II.5. Adobe Photoshop ………………………….. ………………………….. ………………………….. ….. 23
II.6. Blender 3D ………………………….. ………………………….. ………………………….. …………… 25
III. Prezentarea aplicației ………………………….. ………………………….. ………………………….. .. 28
III.1. Descrierea aplicației ………………………….. ………………………….. ………………………….. 28
III.2. Realizarea aplicației ………………………….. ………………………….. ………………………….. 31
III.2.1. Analiza jocului ………………………….. ………………………….. ………………………….. ….. 31
III.2.2. Sche ma proiectului ( scenele) ………………………….. ………………………….. …………… 31
III.2.3. Arhitectura ………………………….. ………………………….. ………………………….. ……….. 33
III.2.4. Gestiunea jocului (clasa GameMangaer) ………………………….. ……………………….. 35
III.2.5. Rețeaua ………………………….. ………………………….. ………………………….. …………….. 38
III.2.6. Optim izarea jocului ………………………….. ………………………….. ………………………… 41
III.2.7. Crearea hărții și a camerei ………………………….. ………………………….. ……………….. 43
III.2.8. Alte scripturi și arhitecturi ………………………….. ………………………….. ………………. 48
IV. Concluzii ………………………….. ………………………….. ………………………….. ………………….. 50
V. Bibliografie ………………………….. ………………………….. ………………………….. ………………… 51
5
I. Introducere
I.1. Istoric
Un joc video este un joc electronic prin care se interacționează cu o interfață grafică pentru a
genera un răspuns vizual pe ecran. În general jocurile au un sisetm de recompensare a utilizatorului
fie prin scorul obținut, fie prin anumite artefacte sau evenimente.
Primele jocuri video au fost realizate în jurul anului 1950. Ele fii nd rulate pe platforme
precum os ciloscopul. În prezent piața mondială de jocuri video este estimată undeva la 100 de
miliarde de dolari, [1].
Termenul de PC Games sau joc pe calculator se referă la faptul că este un joc creat special
pentru calculatoare unde monitorul este principalul dispozitiv de generare a impulsului grafic la care
se aduaugă dispozitivele periferice de intrare, de obicei tastatura și mouse -ul sau joystick -ul.
Cel de -al doilea termen, joc pe consolă, se referă la un joc care este conceput special pentru
acest tip de sistem putând fi conectat fie la un televizor, fie la un monitor. Denumirea de jocuri
video poate fi folosită și pentru a descrie anumite software -uri făcute pentru alte dispozitive cum ar
fi: telefoanele mobile, tabletele, camerele video .
Jocurile sunt mai ușor de clasificat după genul lor, dar odată cu trecerea timpului acestea au
începu t să se desprindă de la un singur tipar urmând să fie o combinație între mai multe genuri, cum
ar fi jocurile de tipul MMORPG (Massively Multiplayer Online Role – Playing Game). Însă până s ă
ajungem la acest nivel jocurile se clasificau într -un singur gen (ex. Arcade) , până în momentul în
care un joc desprins din tiparele clasice ajungea să aibă atât de mult succes încât sa înființeze
propriul gen de joc. Ca exemple putem vorbi de Doom care a lansat genul FPS (First –Person
Shooter ) pentru PC sau Super Mario care a lansat genul jocuri lor de platformă pentru console, [2].
Motoarele grafice sunt sisteme concepute pentru a dezvolta și pentru a crea jocuri video.
Bineînțeles că există mai multe tipuri de motoare grafice , acestea fiind proiectate să funcționeze p e
anumite console video sa u calculatoare personale, [1].
Funcțiile lor principale sunt: motorul de randare pentru realizarea graficii 2D sau 3D,
motor ul de fizică pentru detectarea coliziuni lor, animație, scripting, sunet și inteligența artificială .
6
Procesul de creare al jocurilor este uneori unul economist, pentru că se re utilizează un motor
asemănător dintr -o versiune anterioară.
I.2. Tema propusă
Mi-am propus să creez un j oc video de tip battle cu ajutorul mot orului grafic Unity 3D .
I.3. Motivul alege rii temei
De când eram mic stăteam mai toată ziua în fața calculatorului jucându -mă tot felul de jocuri
video, de la jocuri simpliste de 10MB până la jocuri de ultimă generație . Eram pasionat cel mai mult
de jocurile de strategie și de cele în care se put eau juca în rețea pentru că din punctul meu de vedere
inteligența artificială a jocurilor este una previzibilă. De aceea am ales să fac un joc de strategie de
tipul battle în care utilizatorii să aibă și posibilitatea de a juca în rețea.
Un alt motiv pent ru care am ales să fac un joc video este faptul că de fiecare dată în
momentul în care ajungem să cunosc bine jocul îmi veneau în minte anumite modificări care ar
putea fi făcute sau anumite îmbunătățiri pentru al face mai atractiv, mai interesant, mai com plex.
I.4. Descrierea jocului
Tanks este un joc video 3D de tipul battle și strategie singleplayer și multiplayer, utilizatorul
are posibilitatea de a se duela cu alte tancuri pe câmpul de bătalie sau își poate arăta iscusința în
îndeplinirea cu succes a m isiunilor, la care se adaugă si un pic de aventură, anumite sarcini care
trebuiesc îndeplinite pentru finalizarea nivelului sau pentru câștigarea jocului.
Caracterul principal al jocului este după cum spune și numele un tanc. Fiecare utilizator
poate alege între anumite modele, acestea diferind (alt ele sunt mai rapide, altele mai rezistente), apoi
se poate conecta la diferite moduri ale jocului cum ar fi modul Deathmatch în care dacă ai murit o să
reînvii după un anumit timp, iar câștigătorul este cel care are cele mai multe puncte, sau modul Last
Man Standing în care câștigătorul este jucătorul care ramâne ultimul, nedistrus.
Jocul a fost creat în Unity 3D fiind un motor grafic gratuit pentru începători, dar totodată este
complex și destul de ușor de folosi t, anumite scripturi putând fiind realizate mai ușor deoarece
platforma le gener ează automat.
7
II.5. Descrierea lucrării
Proiectul meu de diplomă este structurată în patru capitole la care se adaugă și Bibliografia,
iar pe parcursul acestora este descris modul în care a fost realizat aceasta, precum și motivele
alegerii temei.
În prima parte este prezentat un scurt istoric al jocurilor video urmat apoi de tema aleasă și
de descrierea jocului.
Partea a doua descrie în mod teoretic tehnologiile folosite pen tru realizarea aplicației,
precum și elemente ale graficii 3D.
În cea de a treia parte este prezentată realizarea jocului, începând cu partea introductivă de
cum se folosește și până la cea aplicativă de implementare propriu -zisă arătând și explicând modu l
în care aceasta a fost realizat .
Ultima p arte, sunt pre zentate concluzii le, idei le viitoare de dezvoltar e, dificultăți, p ăreri și
problemele întâmpinate pe parcursul realizării aplicației.
8
II. Tehnologii utilizate
II.1. Introducere
La realizare a aplicației am folosit platforma Unity 3D (versiunea 2018.1.8f1 pe 64-biți)
pentru c ompunerea efectivă a jocului , program ele Photoshop și Blender pentru a modifica și crea
anumite imagini, modele și animați. De asemenea am folosit limbajele de programare C# și
Javascript la crearea funcțiilor în cadrul scripturilor.
Jocul merge sub extensia te tipul .exe, iar până în momentul de față este compatibil cu un
singur sistem de operare (single platform) și anume Microsoft Windows (10, 8, 7, Xp) .
Limbajul de prog ramare C# a fost folosit în cea mai mare parte a jocului, având o sferă de
extindere mai complexă în funcționalitatea acestuia cum ar fi la schimbul între scene, la
configurarea caracterului, la crearea interfeței utilizatorului etc.
Limbajul de programare Javascript a fost utilizat mai mult pentru funcțiile principale ale
jocului și pentru funcțiile cu mecanisme de declanșare sau de activare ori dezactivare (adica cele din
gama trigger).
Pentru anumite texte sau pentru crearea de anumite cadre (rame) cât ș i la editarea unor poze
am folosit Adobe Photoshop.
La crearea de animați și pentru crearea unor elemente 3D sau modificarea acestora am folosit
programul de modelare Blender. Acestea ulterior urmând să fie iportate în motorul grafic Unity 3D.
II.2. Unity 3D
Unity 3D este o platformă de dezvoltare pentru crearea de jocuri video, aplicați multimedia,
simulări de desktopuri dezvoltată de cei de la Unity Technologies apărută pentru prima dată la
Conferința Mondială a Dezvoltatorilor de la Apple în iunie 2005 .
În prezent motorul este foarte variat și poate susține până la 27 de platforme (Windows,
macOS, Android, iOS, Tizen, Linux, PlayStation, Xbox One) fiind putut fi folosit pentru a crea atât
9
jocuri bidimensionale (2D) cât și tridimensionale (3D). Dea lung ul timpului au a părut mai multe
versiuni ultima versiune fiind Unity 2018.2.2 lansată pe data de 10 august 2018.
Programul are librariile grafice Direct3D (Windows), OpenGL (iOS) , WebGL (Web) și
folosește pentru scripturi limbajul de programare C# acesta fiind cel de bază, urmat apoi desigur de
limbajul JavaScript , [3].
Unity are patru versiuni de licență diferite:
1. Personal
2. Plus
3. Pro
4. Enterprise
1. Personal: oferă toate caracteristicile de baz ă ale motorului grafic, însă nu și cele
uimitoare, mai ieșite din c omun și forțează la apariția logoului în momentul în care
rulam aplicația.
2. Plus: se elimină resticția de la începerea jocului și avem un număr mai mare de
utilizatori concurenți (pentru jocurile în rețea sau cele care permit mai mulți utilizatori
simultan) .
3. Pro: asigură acces la asisten ță premium și raportarea performan țelor (adică mai rapid și
cu mai mult interes în soluționarea problemelor) .
4. Enterprise: permite accesul la codul sursa Unity și oferă o soluție personalizată pentru
jocurile în rețea (multipl ayer) .
Toate aceste diferențe pot fi obervate în tabelul următor , (Tabelul II.1.) :
10
Tabelul II.1. Licențe Unity 3D
De asemenea motorul graphic Unity 5 este un sistem complex care are un editor de lumini la
nivel de harta sau la nivel global, un editor de teren și de vegetație, posibilitatea de a se putea juca în
rețea având un s uport pentru simularea în timp real a mișcărilor caracterelor, supfeței, a întreg
universului creat , (Figura II.1.).
Figura II.1. Interfața cu utilizatorul
Nume
Licență Baza Forțare
ecran
de
pornire Capacitate
jucători Profit
până la
($) Raportarea
perfo rmanțelor Suport
premium Acces
la
codu
sursă Preț
$/lun ă
Personal Da Da 20 100.000 Nu Nu Nu 0
Plus Da Nu 50 200.000 Da Nu Nu 35
Pro Da Nu 100 Nelimitat Da Da Nu 125
Enterprise Da Nu Nelimitat Nelimitat Da Da Da Negociabil
11
Câteva dintre editoarele cele mai importante ale lui Unity 5 precum și carateristicile acestora:
• Luminile
• Camera
• Materiale, Shadere și Texturi
• Motorul de Teren
• Editorul de copaci
• Sistemul de particule
• Funcț ii avansate de randare
• Interfața cu utilizatorul
• Audio
• Coliziuni
• Scripturi
II.2.1. Luminile
Luminile sunt o parte esențială a fiecărei scene. În timp ce liniile și texturile definesc forma
și aspectul unei scene, luminile definesc culoarea și starea de spi rit a mediului 3D. Se po t folosi mai
multe lumini în fiecare scenă. Aranjarea acestora împreună necesită puțină practică și timp, dar
rezultatele pot fi uimitoare, [4].
Luminile pot fi adăugate la scenă din meniul GameObject – Light. Alegem formatul de
lumină dorit din submeniul care apare. Odat ă ce a fost ad ăugată o lumin ă, o po ți manipula ca orice
alt GameObject. În plus, puteți adăuga o Componentă de Lumină la orice GameObject selectat
utilizând Component – Rendering – Light. Ele au de asemenea diferite proprietăți cum ar fi
intensitatea lumini i, puterea acesteia sau distan ța până u nde ajunge lumina, culoarea , (Figura II.2.).
12
Figura II.2. Componentele luminoase
Mai este de precizat faptul că există patru tipuri de lumini de care ne putem folosi : spotur ile
luminoase (spot light) emană lumină slabă pe o suprafață restr ânsă, lumina de punct (point light)
care face lumin ă în tot împrejurul ei, lumina direcțională (directional light) afectează întreaga scenă
a jocului indiferent unde este plas ată având un ca racter asem ănător cu cel al soarelui . Ultima dar nu
cea din urmă este lumina de zona (area light) este asemenea unei sfere sec ționate de un plan
perpendicular (în cazul nostru suprafața de joc) care luminează în interiorul acest eia, (Figura II.3.).
Figur a II.3. Tipurile de lumini
13
II.2.2. Camera
La fel cum camerele sunt folosite în filme pentru a afișa poveste a publicului, camerele în
Unity sunt folosite pentru a afișa lumea jocului. V om avea întotdeauna cel puțin o cameră într -o
scenă, dar se pot folosi u n număr nelimitat de camere . Camerele multiple ne pot oferi un ecran
împărțit ( split-screen ) pentru doi jucători sau c rea efecte personalizate avansate. Pute m anima
camerele sau le pute m controla fizic pentru a ajunge la efectele dorite . Prin personalizare a și
manipularea camerelor, pute m face prezentarea jocului cu adevărat unică. Acestea pot fi setate
pentru a fi afișate în orice ordine, în orice loc de pe ecran sau numai în anumite părți ale acestuia .
Practic, orice puteți să vă imaginați este posibil cu camerele de luat vederi și pute m utiliza camere
tipice sau unice pentru a se potrivi stilului de joc. De exemplu pentru a crea un joc 3D se setează
camera principală (main camera) în spatele caracterului, iar daca dorin o experiență de genul first –
perso n, camera trebuie neap ărat să fie părinte în ierarhie și aranjarea acesteia să fie undeva la nivelul
ochilor ,[5].
Mai jos este prezentată poziția camerai aceasta este una de sus pentru a vedea o suprafață
mai mare de hartă și pentru a putea controla mai u șor caracterul , (Figura II.4.) .
Figura II.4. Direc ționarea Camerei
14
II.2.3. Materiale, Shadere și Texturi
Aceste trei elem ente au o strânsă legătură între ele și de aceea voi vorbi de ele împreună.
Materialele definesc modul în care o suprafață trebuie să fie redată, prin includerea
referințelor la Texturile pe care le folosește, informații despre zid, nuanțe de culoare și multe altele.
Opțiunile disponibile pentru un Material depind de ce Shader utilizează materialul , [6].
Shaderele sunt scripturi mici ca re conțin calcule matematice și algoritmi pentru calculul
culorii fiecărui pixel randat , în funcție de intrarea în iluminat și de configurația Materialului.
Texturile sunt imagini bitmap. Un material poate conține referințe la texturi, astfel încât
Shader -ul Materialului poate folosi texturile în timp ce calculează culoarea suprafeței unui
GameObject . Pe lângă culoarea de bază (Albedo) a suprafeței GameObject, texturile pot reprezenta
multe alte aspecte ale suprafeței unui material, cum ar fi reflexia sau r ugozitatea acestuia.
Pentru o randare normală mare (cum ar fi redarea de caractere, peisaje, medii solide și
transparente, suprafețe dure și moi) Standard Shader este de obicei cea mai bună alegere. Acesta este
un shader foarte personalizabil care este cap abil de a face mai multe tipuri de suprafețe cât mai
realist e.
II.2.4. Motorul de teren (Terrein Engine)
Motorul de teren ne permite să adăug ăm peisaje în jocurile noastre . În timpul rulări, redarea
terenulu i este foarte optimizat ă pentru eficientizarea , în timp ce este în editor, o selecție de
instrumente disponibile pentru a face terenurile ușor și rapid de creat. Această secțiune explică
diferitele opțiuni disponibile pentru terenuri și modul de utilizare a acestora.
Pentru a adăuga un Terrain GameObject la scenă, select ăm GameObjec t – Obiect 3D –
Terrain din meniu. Acest lucru adaugă, de asemenea, un Asset Terrain corespunzător pentru
vizualizarea proiectului. Când face m acest lucru, peisajul este inițial un plan mare. Fereastra
Inspector Terrain oferă u n număr de instrumente pe care le puteți utiliza pentru a crea caracteristici
detaliate de peisaj , [7].
Interfața este una simplistă și minimalistă ea asemănându -se cu cea a editoarelor de
imagine acest lucru nu fiind doar o simplă întâmplare ci explicați a este aceea că suprafețele sunt
15
create în acelaș fel putând fi adăugate texturi sub form ă de imagini sau se pot modela pân ă la cele
mai fine detal ii.
Deoarece se pot crea obiecte de diferite dimensiuni de la obiecte mici la obicte foarte mari,
iar lucrul c u acestea ar fi destul de greu și alocarea timpului necesar s -ar mări considerabil, pentru
manevrarea acestora în spațiul de lucru se folosește o practică standard care aplică textura pe axa x
și y, (Figura II.5.).
Figura II.5. Interfața de editare
II.2.5. Editorul de copaci
Unity oferă un instrument numit Editor de copaci care ne permite să proiect ăm copaci
direct în cadrul editorului fiind foarte util în momentul în care dorim să cre ăm păduri detaliate și
jungle , [8].
Cu toate acestea cei de la Unity r ecomandă și utilizarea editorului SpeedTree Modeler pentru
a crea copaci cu efecte vizuale avansate și cât mai naturale , (Figura II.6.).
16
Figura II.6. Edi torul de copaci
II.2.6. Sistemul de particule
Într-un joc 3D, cele mai multe personaje, elemente de recuzită și elemente de peisaj sunt
reprezentate ca ochiuri, în timp ce un joc 2D folosește așanumitele sprite -uri pentru aceste scopuri.
Particulele sunt imagini mici , simple care sunt afișate și mutate în număr mare de către un
sistem de particule. Fiec are particulă reprezintă o mică parte dintr -o entitate fluidă sau amorfă, iar
efectul tuturor particulelor împreună creează impresia entității complete. Folosind un nor de fum ca
un exemplu, fiecare particulă ar avea o textură de fum mică asemănătoare unui nor mic în sine. Când
mulți dintre ace ști mini-nori sunt aranja ți împreună într -o zonă a scenei, efectul general este un nor
mai mare, care umple volumul , [9].
Mesh -urile și sprite -urile reprezintă modalitatea ideală de a prezenta obiecte "solide" cu o
formă bine definită. Există însă și alte entități în jocuri, care sunt fluide și intangibile în natură și
prin urmare, sunt dificil de portretizat folosind ochiuri sau sprite -uri. Pentru efecte cum ar fi
deplasarea de lichide, fum, nori, flăcări și vrăji mag ice, o abordare diferită este grafica dată de
sistem ul de particule care pote fi utilizat pentru captarea fluidității și energie i, (Figura II.7.).
17
Figura II.7. Sistemul de particule în momentul distrugeri i tancului
II.2.7. Funcții avansate de randare
Executarea razei în redarea standard, valorile roșu, verde și albastru pentru un pixel sunt
fiecare reprezentate de o fracțiune în intervalul 0 … 1, unde 0 reprezintă intensitatea zero și 1
reprezintă intensitatea maximă pentru dispozitivul de afișare. În t imp ce acest lucru este simplu de
utilizat, nu reflectă cu exactitate modul în care iluminatul funcționează într -o scenă a vieții reale.
Ochiul uman tinde să se adapteze la condițiile de iluminare locale, astfel încât un obiect care arată
alb într -o cameră slab luminată poate fi, de fapt, mai puțin strălucitor decât un obiect care arată gri
în plină zi. În plus, ochiul este mai sensibil la diferențele de luminozitate la capătul inferior al
intervalului decât la capătul superior.
Mai multe efecte vizuale con vingătoare pot fi obținute dacă redarea este adaptată pentru a
lăsa intervalele de valori ale pixelilor să reflecte mai precis nivelurile de lumină care ar fi prezente
într-o scenă reală. Deși aceste valori vor trebui în cele din urmă să fie redate înapoi la gama
disponibilă pe dispozitivul de afișare, orice calcule intermediare (cum ar fi efectele imaginii Unity)
vor da rezultate mai autentice. Permiterea reprezentării interne a graficelor pentru a utiliz a valori în
afara domeniului 0..1 este esența randăr ii în intervalul High Dynamic Range (HDR) , [10].
Avantajele HDR ar fi că: c ulorile nu se pierd în zonele cu intensitate ridicată , suport mai bun
și sprijin strălucito r, reducerea supraîncărc ării în zonele de iluminare cu frecvență redusă .
18
Dezavantaje le HDR sunt texturile folosite în virgulă mobilă , (redarea este mai lentă și
necesită mai mult VRAM) , nu există suport pentru hardware anti -aliasing (dar puteți utiliza un efect
de postprocesare anti -aliasing pentru a netezi marginile) , nu este compatibil cu toate componentele
hardware .
II.2.8. Interfața cu utilizatorul (UI)
Sistemul UI ne permite să cre ăm interfețe utilizator rapid și simplu . Aceasta este o
introducere la principalele caracteristici ale sistemului UI al Unity -ului. Una dintre cele mai
importante elemente ale acestuia este Canvas -ul.
Canvasul este zona pe care o utilizează toate elementele interfețe i utilizator care ar trebui să
fie în interior. Pa uza este un obiect de joc cu componentă Canvas pe ea, iar toate elementele UI
trebuie să fie copii ai unei astfel de Canvas , [11].
Crearea unui nou element UI, cum ar fi o imagine utilizând meniul GameObject – UI –
Image, creează automat un Canvas, dacă nu există deja un Canvas în scenă. Elementul UI este creat
ca un copil pe aceast canvas. Zona Canvas es te afișată drept dreptunghi (o suprafață 2D) în
vizualizarea scenei, (Figura II.8.). Acest lucru facilitează poziționarea elementelor UI fără a fi
nevoie ca vizualizarea jocului să fie vizibilă în orice moment. Canvas utilizează obiectul
EventSystem pentru a ajuta sistemul de mesagerie .
Figura II.8. UI creat cu Canvas
19
II.2.9. Audio
Caracteristicile audio ale lui Unity includ sunet spațial 3D complet, mixare în timp real,
ierarhii de mixere, efecte predefinite și multe altele.
Un joc ar fi nereușit și plic tisitor fără un fel de sunet, fie că este vorba de muzică de fundal
sau de alte efecte sonore, [35]. Sistemul audio al lui Unity este flexibil și puternic. Poate importa
cele mai multe formate de fișiere audio standard și dispune de caracteristici sofistic ate pentru
redarea sunetelor în spațiul 3D, opțional cu efecte precum ecou și filtr e aplicate. Unitatea poate
înregistra sunete audio de la orice microfon disponibil pe apar at, pentru utilizare a mai apoi în timpul
jocului sau pentru stocare a și transmi terea acestora , [12].
Fereastra de mai jos afișează mixerul audio, care este, în principiu, un arbore al grupurilor de
mixere audio. Un grup de mixere audio este în esență un mix, un lanț de semnal care ne permite să
atenu ăm volumul și să-l corec tăm. Ne permit e să introduce m efecte care procesează semnalul audio
și modifică parametrii efectelor , (Figura II.9.).
Figura II.9. Fereastra mixerului audio
20
II.2.1 0. Coliziuni
Componentele coliziune definesc forma unui obiect în scopul coliziunilor fizice. Un
colizo r, care este invizibil, nu trebuie să aibă exact aceeași formă ca plasa obiectului , ci de fapt, o
aproximare grosolană este adesea mai eficientă și mai puțin diferențiată în modul de joc.
Cea mai simplă coliziune (și cea mai puțin intensivă a procesorului) sunt așa -numitele tipuri
de colizoare primitive. În 3D, acestea sunt Box Collider, Collider de sferă și Collider de capsulă.
În 2D, puteți utiliza Box Collider 2D și Circle Collider 2D. Oricare dintre acestea pot fi
adăugat e la un singur obiect pentru a crea colizoare combinate.
Prin poziționarea și dimensionarea atentă, colizoarele complexe pot aproxima adesea forma
unui obiect destul de bine, păstrând în acelaș timp un nivel scăzut al procesorului. O flexibilitate
suplimentară poate fi obținută prin obț inerea unor coliziuni suplimentare asupra obiectelor copilului
(de exemplu, cutiile pot fi rotite față de axele locale ale obiectului părinte). Atunci când cr eăm un
astfel de agitator compus, ar trebui să existe un singur corp rigid , componentă, plasată pe obiectul
rădăcină din ierarhie.
Datorită performanțelor de care dă dovadă Unity 5 dispune de un concept foarte bine
dezvoltat pentru a simula realitatea de zi cu zi. A tunci când colizoarele interacționează, suprafețele
lor trebuie să simuleze proprietățil e materialului pe care ar trebui să -l reprezinte , iar acest lucru
poart ă numele de Materiale Fizice (Physics Materials) . De exemplu, o foaie de gheață va fi
alunecoasă, în timp ce o minge de cauciuc va oferi o mulțime de frec ări și va fi foarte săritoare. Deși
forma coliziunilor nu este deformată în timpul coliziunilor, frec ărilor și sări turilor aceas ta poate fi
configurat ă folosind Materiale Fizice. Obținerea exactă a parametrilor poate implica un pic de
încercare și de eroare, dar un material de gheață, d e exemplu, va avea frecare zero (sau foarte
scăzută) ,iar un material de cauciuc o frecare foarte ridicată, [13].
Sistemul de scripting poate detecta coliziuni și inițiază acțiuni utilizând funcția
OnCollisionEnter. Cu toate acestea, pute m utiliza motorul d e fizică pur și simplu pentru a detecta
când un col lider intră în spațiul altui a fără a crea o coliziune. Un collider configurat ca declanșator
(folosind proprietatea Trigger Is) nu se comportă ca un obiect solid și va permite pur și simplu altor
colizori să treacă prin. Atunci când un collider intră în spațiul său, un declanșator va apela funcția
OnTriggerEnter pe scripturile obiectului de declanșare .
21
II.2.11. Scripturi
Scripturile sunt un ingredient esențial în toate jocurile. Chiar și cel mai simplu joc are nevoie
de scripturi, pentru a răspunde la intrarea jucătorului și pentru a asigura că evenimentele din joc a u
loc atunci când ar trebui. Dincolo de aceasta, scripturile pot fi folosite pentru a crea efecte grafice,
pentru a controla comportamentul fizi c al obiectelor sau chiar pentru a implementa un sistem
personalizat AI (inteligență artificială) pentru personajele din joc.
II.3. MonoDevelop
MonoDevelop este mediul de dezvoltare integrat (IDE) furnizat împreună cu Unity. Un IDE
combină funcționarea fam ilială a unui editor de text cu funcții suplimentare pentru depanare și alte
sarcini de gestionare a proiectului. Editorul de text nu va fi acoperit aici, deoarece este destul de
intuitiv, dar integrarea editorului și depanatorului cu Unity este descrisă m ai jos , (Figura II.10.),
[15].
Figura II.10. Interfața MonoDevelop , [16]
Programul este instalat în mod prestabilit cu Unity, deși există opțiunea de al exclude din
instalare pe Windows. Ar trebui să verifi căm dacă MonoDevelop este setat ca editor de scr ipt extern
în meniul Preferințe (meniu: Unitate – Preferințe și apoi select ăm panoul Instrumente externe). Cu
22
această opțiune activată, Unity va lansa MonoDevelop și va folosi ca editor standard pentru toate
fișierele de script , [14].
Pentru a activa depan area la nivel de sursă MonoDevelop, trebuie să verific ăm mai întâi
dacă opțiunea Editor Attaching este activată în Preferințe din panoul Instrumente Externe. Apoi, ar
trebui să sincroniz ăm proiectul Unity cu proiectul MonoDevelop (meniu: Active – Open C #
Project). De asemenea, trebuie să ne asigurăm că opțiunile Build Development și Script Debugging
sunt activate în Build Settings pentru platforma țintă (meniu: Fil e – Build Settings).
II.4. Microsoft Visual Studio
Visual Studio este un mediu de dezvoltare care are un set complet de instrumente de
realizare a unor aplicații de tipul desktop, mobile, Servicii Web XML, ASP.NET.
Visual basic, Visual C#, Visual J# și Visual C++ folosesc acelaș mediu de dezvoltare IDE
care le permite schimbul de informatii între acestea prentru a facilita o gamă mai largă de soluții
într-un timp mai scurt. Aceste limbaje mai pot beneficia și de caracteristicile .NET Framework care
simplifică lucrul la realizarea de aplicții web ASP și XML , [17].
În ultimi ani la nivelul motorulu i grafic Unity 3D mediul de dezvoltare MonoDevelop este
usor înlocuit cu cel Visual Studio fiind mult mai eficient și rapid pentru utilizatori experimentați.
II.4.1. Limbajul C#
C# este un limbaj de programare orientat pe obiecte conceput de cei de la Micr osoft la
sfârșitul anilor 90. A fost conceput de aceștia pentru a face concurență limbajului Java, ambele fiind
derivate de la limbajul de programare C++.
Este un limbaj simplu, de utilitate generală, modern, având o productivitate mare în
programare. Perm ite dezvoltarea aplicațiilor industriale robuste și durabile. Oferă suport complet
pentru dezvoltarea de componente software destul de necesare în mediile distribuite și are de
asemenea un bun suport pentru internaționalizare, adică posibilitatea de a scri e aplicații care pot fi
adaptate simplu și rapid în diferite regiuni unde se vorbesc alte limbi. Putem spune despre el că nu
este numai orientat pe obiecte ci și un limbaj de programare orientat spre componente , [19].
Limbajul C# are o legatură strânsă cu arhitectura .NET.
23
II.4.2. Limbajul JavaScript
JavaScript este tot un limbaj de programare orientat pe obiecte bazat pe conceptul
prototipurilor. Este folosit pentru a da o funcționalitate anume paginilor web, codul JavaScript din
aceste pagini fiind rulat de catre browser. Limbajul în mare parte este folosit la construirea
aplicațiilor web, a site -urilor web, dar este folosit și pentru alte aplicați , [18].
A fost dezvoltat inițial de către Brendan Eich de la Netscape Communications Corporation
sub nume Moc ha, iar mai apoi sub numele de LiveScript, și în cele din urmă denumit JavaScript.
În ciuda numelui JavaScript nu are aproape nimic în comun cu limbajul Java, decât faptul că
ambele au o sintaxă apropiat ă de cea a limbajului C, dar nicidecum asemenea.
II.5. Adobe Photo shop
Adobe Photoshop este un software complex si destul de complicat de folosit pentru editarea
imaginilor digitale pe calculator. Programul este f ăcut și pus la dispoziția noastră de cei de la
compania americană Adobe Systems , [20].
Adobe Pho toshop este unul dintre cele mai bune programe de editare a imaginilor digitale,
fotografiilor, video și web. Photoshop are o interfață intuitivă cu o gamă foarte complexă de unelte
pe care le pute m folosi pentru a face tot felul de lucr uri, de la luminozi tate și contrast până la
modific area și deformarea corpurilor , (Figura II.11.).
Programul este conceput special pentru a permite utilizatorilor să creeze și să editeze
imagini raster în mai multe straturi. Aceste suprapuneri sau straturi pot susține transp arența și pot
acționa și ca măști sau filtre care pot modifica imaginile care stau la baza acestora în straturile de
sub acestea. Umbrele și alte efecte, cum ar fi compoziția alfa, pot fi aplicate. Este, de asemenea,
posibil să aplic ăm mai multe modele col or la aceste straturi – CMYK, RGB, Spot Color și spațiu de
culoare Duotone și Lap , [21].
Extensia de fișier implicită pentru o lucrare în desfășurare se numește .PSD (Document
Photoshop). Un fișier PSD are un maxim de 30.000 de pixeli pentru lățime și înăl țime și o limită de
lungime de fișier de 2 gigaocteți. Un alt tip de fișier Photoshop este .PSB (Photoshop Big) – este un
format mare de document și extinde limita maximă a înălțimii și lățimii PSD la 300.000 pixeli și
extinde limita de lungime la aproxima tiv 4 exabyte.
24
Cele mai noi instrumente Photoshop , [20]:
• Camera RAW: oferă acces rapid si util la imaginile de tipul RAW
• Adobe Bridge: este un browser no u de ultima generație care simplifică utilizarea
fișierelor și gestionarea acestora
• Vanish Pint: oferă posibilitatea de a clona, lipi sau picta automat elemente
• Image Warp: capacitatea de a deforma imaginile folosind doar mouse -ul
• Smart object: abilitatea de a deforma și a reveni la forma ințială fară a pierde din
claritate
• Capacitatea de a selecta mai mult e straturi simultan
• Multi tasking
• Suport Hight Dynamic Range (HDR 32 bi ți): creează și editează imagini pe 32 de biți
• Shadow/Highlight: contrast îmbunătățit la fotografiile supraexpuse sau subexpuse la
lumină , controlând echilibrul visual al imagini
Figur a II.11. Interfața Photoshop CC
25
II.6. Blender 3D
Blender 3D este un program software liber, adică poate fi studiat, modificat, îmbunătățit și
distribuit cu restricții minime, de grafică 3D. Cu ajutorul lui se pot realiza modele 3D, texturi,
simularea apei , animați, randare , mapare UV (redarea unui model 3D în format 2D), crearea
aplicaților interactive 3D și multe alte lucruri.
Este de tipul cross -platform deci suportă mai multe tipuri de sisteme de operare cum ar fi
Linux, Windows, Mac OS X.
A fost crea t ca o aplicație de uz casnic , principalul autor este Ton Rosendaal, care a fondat
firma NaN pentru a dezvolta și pentru a putea distribui în continuare programul. Programul a fost
distribuit mai întai ca freeware, până când NaN a dat faliment în 2002, num ele fiind inspirat dintr -un
cântec. Creditorii și -au dat acordul ca Blender să apară din nou în circulație în schimbul unei plăți de
100.000 €, fiind la ora actuală o aplicație open source dezvoltată și susținută de cei de la Blender
Foundation , [22].
Supor tă foarte multe forme geometrice primitive precum structuri poligonale , curbe Bezier
și suprafețe NURBS. Este capabil de randare internă și integrare cu open source YafRay. Are la
dispoziție o gamă foarte largă de unelte pentru animație cum ar fi cinematic a inversă, deformări,
keyframes, timeline, animație non -liniară, softbody, detectarea coliziunilor dintre structurile de
obiecte, dinamica fluidelor, păr bazat pe sistemul de particule etc . Se pot folosi sau crea scripturi în
Python pentru automatizarea sa rcinilor sau pentru anumite lucruri . Game Blender oferă funcții de
interactivitate precum logica programabilă, dinamica motorului și detectarea coliziunilor.
În Blender, un Obiect reprezintă o entitate care interacționează cu mediul înconjurător, iar
Datel e lui personale sunt forma sau funcția acestuia. Relația dintre cele două (Obiect – Date) sunt
linkabile dinamic tot timpul facilitând procesul de modelare rapidă , aceasta fiind o funcție unică a
programului. Are un sistem intern care permite împachetarea mai multor scene într -un singur fișier,
acest fișier purtând extensia .blend. Toate fișierele cu acest format (.blend) sunt compatibilie cu
toate platformele putând fi utilizate ca o bibliotecă pentru a importa un conținut gata creat. Blender
salvează auto mat fișierele la un interval de timp stabilit sau în urma unor transformări mai
meticuloase pentru a asigura pe cât posibil în eventualele erori ale programului. Toate scenele,
imaginile, sunetele, efectele, materialele a unei singure animați pot fi stocat e într -un singur fișier de
26
tipul .blend. De amin tit este faptul că fișierul mai memorează set ările făcute în momentul salvării în
așa fel încât configurația utilizatorului cât și obiectele stocate în el apar de fiecare dată c ând pornim
Blender , [22].
Blend er este un program foarte complex când este vorba despre a fi învâțat pentru că
aproape fiecare funcție are o scurtătură de tastă. Odată cu lansare a open -source s -a lucrat din greu la
interfața acestuia încercându -se în a se face mai ordonată, locul funcți ilor având o amplasare mai
logică.
Interfața cu utilizatorul este formată din mai multe ecrane, care pot fi împ ărțite fiecare în
mai multe secțiuni pentru a putea vizualiza orice unghi și pentru a cuprinde o sferă cât mai largă.
Diverse tipuri de ferestre pot fi controlate simultan de câtre utilizator, modul de dispunere și de
setare al interfeței fiind complet controlabil , (Figura II.12).
Figura II.12. Interfața în Blender 3D
Blender se aseamană cel mai mult cu programul de modelare Maya, iar cele două programe
sunt foarte bine sincronizate cu motorul grafic Unity 3D putând fi importate fișiere. Cerințele de
27
sistem pentru Blender (pentru o versiune începând de la 2.7x) sunt prezentate în tabelul
următo,(Tabelul II.2.), [23].
.
Tipul de cerințe CPU RAM Display GPU
Minime 32 biți dual core
2 ghz 2 GB 1280×768 512 GB
Recomandate 64 biți quad core 8 GB Full HD 2 GB
Optime 64 biți octa core 16 GB 2 x Full HD 4 GB
Tabelul II.2. Cerințe le de sistem Blender 3D
28
III. Prezentarea aplicației
III.1. Descrierea aplicației
Utilizatorul trăiește experiență virtuală creată cu ajutorul motorului grafic Unity 3D și îl duce
pe acesta într -un univers nou cel al jocurilor de tipul Battle și RTS (Real Time S trategy) .
Aplicația și anumite elemente, obiecte, ani mații, modele, caractere, fenomene sunt create,
modelate, inplementate de mine cu ajutorul tehnologiilor folosite, au fost importate si anumite
modele unele dintre ele fiind chiar îmbunătățite sau modificate.
Aplicația are un meniu interactiv si simplist c are oferă un mediu plăcut punându -ne la
dispoziție șapte butoane, două dintre acestea sunt pentru mediul online unde putem crea un joc sau
putem intra în jocurile create de către alți jucători , butonul de Training ne trimite la antrenamente în
mediul singl eplayer unde va trebui să îndeplinim anumite sarcini. Butoanele Settings și Keys sunt
pentru setările jocului pentru a afla comenzile și pentru a reduce sau amplifica sonorul. În mijloc
avem și un buton de Customize care ne permite să ne personalizăm tancu l sau să îl schimb ăm cu
altul, iar ultimul buton, dar nu cel din urmă este bineînțeles butonul de ieșire , Quit , (Figura III.1.).
Figura III.1. Meniu l aplicației
29
Caracterul principal este un tanc cu ajutorul căruia utilizatorul trebuie să completeze o ser ie
de sarcini, de la cele de introducere până la cele de ap ărare sau de atac. În tabelul de mai jos sunt
prezentat e butoanele cu care este controlat tancul , (Tabelul III.1.).
Tasta corespunzătoare Funcția
W Sus
S Jos
A Stânga
D Dreapta
Left click Foc
Mișcările mouse -ului Pentru a ținti
Tabelul III. 1. Controlul tancului
Utilizatorul are ocazia de a alege între mai multe tipuri de tancuri acestea fiind diferite între
ele prin faptul că altele sunt mai rezistente, altele mai rapide, iar altele au o pute re de tragere mai
mare fiind și mai solide. Aceste caractere au fost importate din secțiune a de asseturi pe care Unity o
pune la dispoziție utilizatorilor unele modificate, create cu ajutorul programului Blender , [24].
Jocul dispune de mai multe hărți dife rite între ele prin aranjamente și prin textură acestea
sunt limitate simulând ideea de o aren ă uriașă. Hărțile captează în mare parte o zonă deșertică cu
temperaturi ridicate, altele vor să exprime o bătălie polară în gerul iernii și a viscolului, și mai avem
o hartă care simulează poligonul de tragere , [25].
Aplicația conține o coloană sonoră cu efecte 3D pentru un efect cât mai realist acestea sunt
sunete de mișcare în timpul deplasării, de armament în momentul în care obuzul lovește sau
explozibilul se declanșează, de distrugere în momentul în care tancurile se distrug, sau sunete de
mediu care apar în anumite zone ale hărți pentru a pune în evidență anumite lucruri cum ar fi
destin ațiile unde trebuie să ajungem.
Totodată aplicația conține și inamici v irtuali pe lângă terenurile anti –tanc și minele de teren .
Aceștia mai sunt reprezentați fie de alte tancuri , fie de tunuri, obuziere. Au o inteligență artificială
30
destul de ridicată pentru că țin cont de anumite principii ale fizici i și calculează traiect oria țintei dată
de viteza de deplasare a dușmanului.
Fiecare nivel este unic și are anumite cerințe, dacă jucătorul reușește să finalizeze cu succes
nivelul i se va calcula un scor în funcție de cerintele îndeplinite și în funcție de acestea va primi cât e
una, două sau trei medalii. Cu aceste medalii vor fi deblocate nivelurile urm ătoare. Totodată
utilizatorul va mai primi și niște bă nuți auri i cu ajutorul cărora va putea să își personalizeze cât mai
mult tancul sau să îl schimbe cu altul mai puternic sa u mai rapid.
Ficare tanc are o bară de vi ață care arată la câte proie ctile rezistă, dacă ace asta ajung e la 0
tancul este distrus, iar utilizatorul este scos din joc.
În continuare vă voi prezenta cerințele de sistem recomandate pentru a rula aplicația ,
(Tabelul III.2.) :
Componente Specificații
Procesor Dual core 2.2+ ghz
Placă video 512 MB
Memorie RAM 2 GB
Hard disk 400 MB
Unitate optică CD, DVD, USB
Sistem de operare Windows Xp, 7, 8, 10, Vista
Tabelul III. 2. Cerințele de siste m
31
III.2. Realizare a aplicației
III.2.1. Analiza jocului
Unitatea Analytics ofer ă informații asupra modului în care utilizator ii rulează aplica ția și
cum pute m modifica experiența de joc a acestora .
Pentru a activa serviciul Unity Analytics, deschide m fereastra Servicii, select ăm fila
Servicii și face m click pe Analytics. Aceasta deschide fereastra Google Analytics. Pentru a activa
serviciul, face m click pe comutare , (Figura III.1.) , [26].
Figura III.1. Pagina de analiză
III.2.2. Schema proiectului ( scenele)
Înainte de a încerca să execu tăm sau să construi m proiectul, trebuie să configur ăm fizica și
să adăug ăm Scenele la Setările de construire. Pentru a configura fizica, în bara de meniu Unitate
merge m la Edi t – Project Settings – Physics. Configur ând matricea de gravitate și de coliziune a
stratului. Adăug ăm toate scenele la Setările de construcție așa cum este afișat în figura următoare,
(Figura III.2. ).
32
Figura III.2. Setările fizice, inclusiv straturile de coliziune
33
Figura III.3. Construcția scenelor
III.2.3. Arhitec tura
Un singu r jucător este tratat ca un joc ător local, pentru a minimiza arhitectura logicii jocului
de bază. Meniul principal al jocului este alcătuit din panouri, fiecare având o clasă care controlează
funcționalitatea ecranului respectiv.
Animația de loading dintre scene a fost realizată cu ajutorul programului Adobe Photoshop
CC, precum și poza de background. Pentru stilizarea meniului am folosit Text Mesh Pro un utilitar
de pe Unity AssetStore , [31].
Toate panourile sunt menționate în obiectul MainMenuUI, care con trolează tranzițiile
dintre diferitele ecrane. Nivelurile și modurile care apar pe ecranele respective sunt stocate în
ScriptableObjects. ScriptableObjects sunt containere de date. Ele sunt similare cu cele din
MonoBehaviours, cu excepția faptului că nu su nt atașate la GameObjects și pot fi salvate ca active
în proiect , (Figura III.4.).
34
Figura III.4. Clasa MainMenuUI cu regiunile ei
De exemplu, MapDetails este o clasă serializabilă care reprezintă o hartă multiplayer cu
câmpuri serializabile, inclusiv num ele, descriere, numele scenei și imaginea de previzualizare.
Există multe hărți, fiecare cu o instanță MapDetails. O altă clasă numită MapList conține o listă a
acestor instanțe MapDetails. MapList este derivat din SerializedObject, astfel încât acesta poa te fi
serializat.
35
Pentru a adăuga o scenă existentă ca o hartă pentru mai mulți jucători, trebuie doar să o
adăug ăm ca o intrare în lista hărților. Pentru a crea o nouă hartă multipl ayer, este mai ușor să
duplicăm o hartă existentă și să o utiliz ăm ca șabl on. Lucrul extraordinar în ceea ce privește
utilizarea ScriptableObjects este că nu trebuie să fie atașat vreunui GameObject sau Prefab și, ca
atare, pot fi păstrat ca un strat separat de configurare. Acest lucru ne permite acces la configurație
fără a pun e în pericol niciunul din Prefabs .
Modul de joc este gestionat de o clasă GameManager, care primește setările de joc din clasa
GameSettings.
III.2.4. Gestiunea jocului (clasa GameMangaer)
Clasa GameManager este responsabilă pentru difuzarea logicii jocul ui de bază și operează ca
o mașină de stat . Acesta conține o clasă de reguliProcesor care impune reguli de joc. RuleProcessor
este o clasă de bază care conține funcții (numite de GameManager) care sunt supraîncărcate pentru a
pune în aplicare diferitele mo duri de joc (Last Man Standing, Deathmatch, Team Deathmatch, Mini –
game și Single Player). GameManager primește RuleProcessor de la clasa GameSettings, care
conține informați despre jocul actual (inclusiv modul de joc, harta și dacă jocul este single -player
sau nu). Clasa GameSettings este configurată / modificată atunci când un joc este găzduit, alăturat
(setările sunt trimise prin rețea) sau atunci când este creat un joc pentru un singur jucător.
GameSettings este un singleton persistent, ceea ce înseamnă că poate exista doar o singură instanță
și că aceasta persistă între scenele de joc ,(Figura III.5.), [29].
Figura III. 5. Scripturile necesare pentru setările jocului
Deși GameManager este un NetworkBehavior, jocul rulează numai pe server (astfel încât
jocul este server autoritar), iar GameManager folosește pur și simplu funcționalitatea de rețea pentru
sincronizarea afișării informațiilor despre Clienți (HUD, diverse modalități și kill log) și
sincronizarea reproducerii de obiecte pe Clienți , [32].
36
În fig ura de mai jos este prezentată clasa GameManager, (Figura III.6.):
Figura III. 6. Clasa GameManager (o parte din aceasta)
Clasa RulesProcessor are funcții de ajutor pentru manipularea morții jucătorului (inclusiv
modul de tratare a sinuciderilor și a ucid erilor), respawn și starea jocului, acestea fiind
supraîncărcate pentru diferite moduri de joc. De exemplu, atunci când un jucător ucide altul:
● Deathmatch: Jucătorul care a ucis are 1 punct. Jucătorul care a murit se va respa wna după o
întârziere.
● Team Deathmatch: Jucătorul care a ucis are 1 punct. Echipa jucătorului are un punct. Jucătorul
care a murit se va respaw na după o întârziere.
● Ultimul om în picioare: Nimeni nu respawn ează sau primește puncte, deoarece respawn și
puncte le sunt manipulate la s fârșitul rundei (în cazul în care unul sau mai puțini jucători au rămas în
joc).
37
În figura de mai jos este prezentată funcția de respawn, (Figura III.7.):
Figura III. 7. Funția de Respawn random
Jocurile cu un singur jucător sunt tratate ca jocuri le multiplayer, cu un singur jucător (gazda)
găzduit pe localhost ca o conexiune directă. Acesta este setat ca acesta pentru a minimiza cantitatea
de re -arhitectură cerută și face posibilă împărțirea clasei GameManager .
Jocurile cu un singur jucător, inclusiv mi ni-jocurile și nivelurile de antrenament, utilizează
OfflineRulesProcessor, care este o clasă de copii de RulesProcessor. Mini -jocul folosește
ShootingRangeRulesProcessor și extinde OfflineRulesProcessor, oferind flux pentru deblocarea
decorațiilor și seta rea player -ului la invulnerabil, astfel încât este imposibil să vă omorâți în mini –
joc. Nivelurile de instruire utilizează SinglePlayerRulesProcessor, care extinde și
OfflineRulesProces sor și are o listă de obiective, [34].
Obiectivele se învârt în jurul u nor caractere non -playable (NPC) și puncte de interes (cum ar
fi uciderea unui NPC înainte de a ajunge în zona de sfârșit). O clasă de bază N PC numește o funcție
pe SinglePlayerRulesProcessor, care la rândul ei numește o funcție pentru fiecare dintre obiec tivele
sale.
Funcția OfflineRulesProcessor este prezentată simplificat în figura ce urmează , (Figura
III.8.):
38
Figura III. 8. Funcția Off lineRulesProcessor (secvență )
În mod similar, un obiect TargetZone detectează când un GameObject intră în
declanșatoare le sale și apelează o funcție pe SinglePlayerRulesProcessor, care la rândul ei numește o
funcție pentru fiecare dintre obiectivele sale. Fiecare obiectiv extinde clasa de bază a obiectivului și
ține evidența dacă jucătorul a obținut sau a eșuat un obiectiv pentru un singur jucător. Clasa de bază
a obiectivului definește o variabilă bool serializabil ă pentru a marca dacă obiectivul respectiv este
sau nu principalul obiectiv și un număr întreg pentru moneda premiului , [26] .
O misiune este considerată eșuată dacă jucătorul moare sau dacă obiectivul principal nu a
reușit. O misiune este considerată un succes dacă obiectivul principal este atins .
III.2.5. Rețeaua
Cele mai multe exemple de unitate pentru crearea jocurilor multiplayer încurajează o
abordare comple tă a serverului – autoritate la fotografiere: Clientul apasă butonul pentru foc, care
trimite un mesaj serverului, care rulează logica de fotografiere și declanșează proiectilele pe fiecare
client.
39
Acest lucru funcționează foarte bine în situații cu o late nță minimă. Problema cu medii de
latență ridicat ă este aceea că un client apasă pe buton pentru a declanșa și există o întârziere vizibilă
înainte de a fi împușcat de un glonț/proiectil , deoarece Clientul trebuie să aștepte ca serverul să -i
trimită un mesa j,(Figura III.9.) .
Figura III. 9. Timpul necesar ca servărul să răspundă în momentul trageri i
Când proiectilul se ciocnește cu ceva, acesta este distrus și creează o explozie. Aceste
ciocniri sunt gestionate de Server (pentru că este autoritar), dar explo zia vizuală apare încă pe
Client. În esență, Serverul trimite un mesaj de la Server spunând "Explode", iar proiectilul
explodează vizual pe Client. Problema este că proiectilul de pe Client se află de -a lungul traiectoriei
sale atunci când primește mesajul "Explode", astfel încât vizualul exploziei este în locul greșit , [27].
Deci, există două proiectile pe Client: un ul creat de Client (Proiectil local) și un ul creat de
Server (proiectilul de rețea). În loc să repozițion ez proiectilul de rețea și să șterg p roiectilul local,
pur și simplu am redefi nit scopurile lor:
1. Proiectil local = proiectilul vizual, o reprezentare vizuală a proiectilului.
2. Proiectil de rețea = proiectilul logic, o reprezentare logică a glonțului conform Serverului.
Aici se produce ex plozia.
Ideea este că mai există două proiectile care rulează pe Client, dar proiectilul logic nu este
vizibil – are singurul scop de a se asigura că exploziile apar în locul corect. Această implementare
este mult mai plăcută jucătorului, deoarece explozia apare în locul corect, deși întârziată.
40
O problemă cu această implementare constă în faptul că proiectilul vizual poate călători în
mod eficient peste punctul în care are loc coliziunea, iar apoi se produce explozia , (Figura III.10. ).
Figura III. 10. Predicția Client – Server
Am stabilit acest lucru și prin manipularea coliziunii pe Client, fără a genera explozia sau
nici unul dintre efectele secundare (daune și fizică), deoarece acestea sunt tratate de Server. Detecția
coliziunilor de pe partea clientul ui șterge pur și simplu proiectilul vizual.
Soluția finală pentru fotografierea în rețea a venit din realizarea faptului că proiectilele în
sine nu fac daune – exploziile fac. Ca atare, am decis să fac ExplosionManager (Scripts /
ExplosionManager.cs), care generează explozii prin rețea, cu Serverul determinând poziția
exploziei . Funcția de daune este prezentată în figura de mai jos, (Figura III.11.).
41
Figura III. 11. Scriptul ExplosionManager funcția de daune
Acum, atunci când clientul împușcă, pe Client es te creat un proiectil local. Serverul trimite
apoi un mesaj tuturor clienților pentru a crea proiectilul pe care clientul de fotografiere care îl ignoră
(ignorând efectiv proiectilul din rețea). Atunci când proiectilul se ciocnește, acesta este distrus și
dacă coliziunea a avut loc pe server, atunci explozia este creată în locația corectă a serverului și a
tuturor clienților. Rezultatul final este că explozia se află la locul potrivit pentru toți clienții, dar
poate să apară întârziată în momentul în care c lientul face fotografia.
III.2.6. Optimizarea jocului
Urmărirea diferitelor analize ne permite să vede m cum este utilizat jocul nostru și ce
modificări trebuie să face m pentru a optimiza experiența de joc. Unitatea oferă un cadru ușor de
folosit pentru int egrarea analizei și urmărește anumite evenimente fără ca dezvoltatorii să scrie orice
cod. Unitatea Analytics ne permite să urmări m evenimente personalizate printr -un simplu apel al
funcției: Analytics.CustomEvent.
Pentru a implementa funcția Analytics în joc, am creat o clasă numită AnalyticsHelper, cu
funcții statice pentru înfășurarea apelului Analytics.CustomEvent. Fiecare funcție statică este
42
denumită în funcție de evenimentul personalizat pe care îl înfășoară și se numește acolo unde este
cazul. Am of erit fiecărui eveniment personalizat parametri suficienți pentru a furniza suficiente
informații pentru analiză.
De ex emplu, atunci când un tanc este distrus în timpul unui joc multiplayer, acest eveniment
este urmărit. Urmărirea distrugerii tancului nu of eră suficiente informații pentru a lua decizii de
optimiz are a jocului – trebuie să știm cum și unde a fost distrus tancul . Evenimentul de distrugere
(moartea obiectului) urmărește următoarele:
– Tipul tancului jucătorului
– Tipul tancului criminalului
– Tipul de explozie (care arată ce armă a fost folosit ă)
– Harta unde a avut loc distrugerea (moartea obiectului)
Având în vedere acești parametri, pute m afla dacă un tanc specific este dezechilibrat (de
exemplu, dacă tancul lent dă o mulțime de ucideri, dar nu reușește niciodată să moară) și apoi
efectua ajustările adecvate pentru a echilibra jocul.
Unity furnizează un explorator de date ca parte a tabloului de bord (Dashboard Analytics ).
Acest lucru mi-a permi s să văd grafice bazate pe diverse evenimente. Fi gura de mai jos arată un
exemplu de eveniment de ucidere multiplayer, cum este cel descris mai sus, și arată că tancul cel
mai dominant este în prezent cel numit balancedTank, care este tancul de player implicit , (Figura
III.12.) . Presupunând că acest exem plu de date era o activitate reală a jucătorilor, am putea
concluziona că jucătorii nu au descoperit celelalte tipuri de tancuri (heavyTank, fastTank) și ar
trebui să le fac mai atrăgătoare.
43
Figura III. 12. Tabloul de bord cu cele mai folosite tancuri
Plotul evenimentului MultiplayerTankKilled care compară tancurile ucigașe. Graficul arată
că BalancedTank are cele mai multe ucideri p entru o listă completă a evenimentelor personalizate .
III.2.7. Crearea hărții și a camerei
Figura III.13. Camera jocului
Camera jocului a fost realizată cu o vedere în perspectivă 3D, pentru a putea vedea mai bine
harta , (Figura III.13.) . Prima hart ă a fost i mporta tă de pe site -ul oficial Unity, iar celelalte au fost
modificate pe baza acesteia suferind unele transformări de culoare , mărime, textură și dimensiune.
44
Culorile sunt creat e ca elemente perfabricate pentru ca decorarea mediului să fie mai ușoară
și mai practică, iar apoi le -am aplicat prin metoda drag and drop pe hartă , (Figura III.14.) , [30].
Figura III.14. Culo rile prefabricate folosite
Clădirile sunt importate , create cu ajutorul programului Blender și sunt de tipul Box Collider
adică sunt corpuri solide care nu se permit trecere a caracterului sau a proiectilului prin ele ,(Figura
III.15.), [31].
Figura III.15 . Clădirile din aplicație
Copaci sunt realizați cu ajutorul utilitarului TreeEditor care ne oferă o rapiditate și ne
simplifică mult munca.
Sondele de petrol sunt tot corpuri opace și solide dar pe lângă asta acestea produc zgomote
3D în momentul în care apar în cadru. Suntele au fost inspirate și importate dintr -o sondă de petrol
adevărată dând jocului o notă realistă, iar set ările au fost alese pentru a facilita acest lucru , (Figura
III.16.).
45
Figura III.1.6 Sondă de petrol din joc împreună cu setările audio
Săgețile de zonă indică zona unde trebuie să ajungem și au fost create cu ajutorul software –
ului Blender 3D, iar animația acestora în Unity , (Figura III.17.) .
Figura III.17. Săgeată de zonă realizată în Blender 3D
Setările pentru lumină au fost cr eate pentru a da impresia unui soare virtual. Acestea sunt
de tipul Realtime, iar intensitatea lor este una puternică cu o ușoara tentă de umbrire , după cum se
poate observa și în figura următoare, (Figura III.18.).
46
Figura III.18. Set ările pentru lumină (Soarele)
Turetele sunt și ele corpuri rigide, opace care au fost importate din Unity AssetStore.
Acestea au și ele au implementate funcția audio 3D, dar pe lân gă aceasta au scripturile NPC care ne
permit să realizăm viața acestora și modul în care sunt di struse folosind sistemul de particule , dar și
inteligența artificială de care dau dovadă.
Scriptul de turete ne permite să ajustăm modul în care acestea să tragă, precum și sunetul
exploziei în momentul tragerii , timpul necesar între trageri, forța de trag ere dând parametri minimi
și cei maximi putem stabili aria de activitate a acestora, modul în carea turetele acționează și până
unde poate să ajungă proiectilu l.
În figurile următoare sunt prezentate turetele și minele de teren, (Figura III.19., Figura
III.20.):
47
Figura III.19. Turetele din joc cu setările acestora
Minele de teren sunt de tipul trigger adică se activează dacă sunt îndeplinite anumite criterii
și sunt folosite pentru a îngreuna accesul în anumite zone. Cu ajutorul scriptului creat putem ajus ta
daunele pe care acestea le provoacă, timpul care îl au până la autodetonare, pu tem selecta luminile
care trebuie să se aprindă în momentul armării precum și aria de distrugere.
Figura III.20. Minele de teren din joc și setările lor
48
III.2.8. Alte s cripturi și arhitecturi
Scriptul pentru schimbarea scenei de la nivelul 1 la 2 , (Figura III.21.).
Figura III.21. Scriptul pentru schimbarea scenei
Cu siguranță unul dintre cele mai importante scripturi este cel care face posibilă deplasarea și
modul de t ragere al tancului fără de care jocul nu ar putea funcționa.
Tancul se deplasează cu ajutorul scriptului de mișcare TankMovement. Acesta este unul mai
diferit față de celelalte tipuri de depl asări deoarce a trebuit gândit modul în care un tanc se
deplase ază pe șenile acesta diferind de modul în care se deplasează o mașină. Mișcările tancului sunt
acompaniate de suntele audio care sunt: sunetul de porn ire a tancului de pe loc, sunetul de mișcare
continuă al tancului , sunetul pe care motorul îl scoate atunc i când tancul se află nemișcat.
Viața caracterului este reprezentată prin scriptul TankHelth , iar în momentul în care aceasta
ajunge la zero, adică tancul este distrus atunci își face apariția sistemul de particule care creează
animația de explozie.
Scriptul de tragere sau Tankshooting este cel care face legătura între tanc – proiectil – țintă.
Proiectilele sunt corpuri rigide care se transformă în momentul coliziunilor, adică în momentul în
care întâlnesc alte corpuri rigide, solide, dure. Tureta tanculu i se ajustează prin interpediul scriptului
de țintire (AimCanvas) care calculează cordonatele la care se află cursorul (mouse -ul) în momentul
declanșării exploziei. Obuzul va merge pe traiectoria dorită diferența constând în viteza de d eplasare
a proiectiu lui. Această valoare poate atinge un prag aproape de 1 și atunci proiectilul va merge cu o
viteză ridicată sau aproape de 0 având un unghi de deplasare mai mare și mai încet. Tot în cadrul
49
acestui script am creat și explozia de tragere, magnitudinea, forma și durata exploziei , (Figura
III.22.).
Figura III.2 2. Scripturile pentru tanc
50
IV. Concluzii
Unity 3D este un motor grafic complex pentru că se pot realiza prin intermediul acestuia
foarte multe elemente realiste și interactive care fac ca experiența de joc să fie una cât mai atractivă
și mai plăcută.
Un alt avantaj este faptul că datorită conceptel or de care dă dovadă și a modului în care
platforma Unity este concepută am putut beneficia de un ajutor suplimentar aș putea spune d atorită
secțiuni Asset S tore de unde se pot implementa diferite elemente grafice, scripturi și utilitare. Pe
lângă secțiune a de atașamente platforma mai beneficiază și de foarte multe tutoriale și documentați i
explicate într -un mod simplist și nu foarte complicat care mi -au fost de mare ajutor în realizarea
aplicației.
Unele probleme întâmpinate, cum ar fi: construirea scriptului GameManager, modul de luptă
a tancurilor în mediul multiplayer, mi -au creat probleme dar pot spune ca am reușit sa le rezolv cu
succes pentru a oferi o experiență de joc cât mai plăcută.
Deci, aș putea spune ca crearea jocului Tanks din punctul meu de vedere a fost una destul de
interesantă și de provocatoare în acelaș timp, iar realizarea acest eia în motorul grafic Unity 3D a fost
o algere foarte bună.
Avantajele aplicației constau în faptul că aceasta se pornește în cateva secunde fără a fi
nevoie în a selecta anumiți parametri, nu necesită resurse performante , este interactivă și amuzantă,
animațiile și sunetele sunt scurte și nu plictisesc utilizator ul, culorile folosite sunt naturale, cu
contraste obișnuite și nu obosesc ochii.
Îmbunătățirile care s -ar putea face ar fi dezvoltarea și modificarea texturii tancurilor, a
terenurilor pentru o grafică mai realistă, introducerea de elemente de genul artef actelor (itemelor) în
care să fie depozitate muniția și alte lucruri, crearea mai multor unități pe suprafața de joc pentru a fi
controlate.
51
V . Bibliografie
[1] https://ro.wikipedia.org/wiki/Joc_v ideo
[2] https://ro.wikipedia.org/wiki/Motor_grafic
[3] https://en.wikipedia.org/wiki/Unity_(game_engine)
[4] https://docs.unity3d.com/Manual/Lights.html
[5] https://docs.unity3d.com/Manual/Cameras.html
[6] https://docs.unity3d.com/Manual/Shaders.html
[7] https://docs.unity3d.com/Manual/script -Terrain.html
[8] https://do cs.unity3d.com/Manual/class -Tree.html
[9] https://docs.unity3d.com/Manual/ParticleSystems.html
[10] https://docs.unity3d.com/Man ual/HDR.html
[11] https://docs.unity3d.com/Manual/UISystem.html
[12] https://docs.unity3d.com/Manual/Audio.html
[13] https://docs.unity3d.com/Manual/CollidersOverview.html
[14] https://docs.unity3d.com/2017.4/Documentation/Manual/ MonoDevelop.html
[15] https://danielthenerdyguy.co.uk/2014/05/04/game -dev-software -unity -free/
[16] https://danielthenerdyguy.files.wordpress.com/2014/05/unity -mono -develop.png
[17] https://ro.wikipedia.org/wiki/Microsoft_Visual_Studio
[18] https://ro.wikipedia.org/wiki/JavaScript
[19] http://www.ls -infomat.ro/user/content/e9efcsharp.pdf
[20] https://ro.wikipedia.org/wiki/Adobe_Photoshop
[21] https://www.techopedia.com/definition/32364/adobe -photoshop
52
[22] https://ro.wikipedia.org/wiki/Blender_(software)
[23] https://www.blender.org/download/requirements/
[24] https://assetstore.unity.com/packages/essentials/tutorial -projects/tanks -tutorial -46209
[25] https://assetsto re.unity.com/packages/vfx/shaders/terrain -blending -starter -kit-91921
[26] https://analytics.cloud.unity3d.com/reporting/1608f338 -3d55 -42f9-9271 -44b2aa49eca 2/
[27] https://docs.unity3d.com/Manual/class -NetworkManagerUNet.html
[28] https://docs.unity3d .com/Manual/class -NetworkTransformChild.html
[29] https://docs.unity3d.com/Manual/UNetClassesReference.html
[30] https://assetstore.unity.com/packages/vfx/shaders/terrain -blending -starter -kit-91921
[31] https://assetstore.unity.com/pac kages/essentials/asset -packs/standard -assets -32351
[32] https://docs.unity3d.com/Manual/UnityMultiplayerSettingUp.html
[33] https://assetstore.unity.com/packages/essentials/beta -projects/textmesh -pro-84126
[34] Notițe de curs Doina Zmaranda – Programare Orientată pe Obiecte
[35] Notițe de curs Novac Ovidiu – Sisteme multimedi a
DECLARAȚIE DE AUTENTICITATE
A
LUCRĂRII DE FINALIZARE A STUDIILOR
Titlul lucrării _______________________________________________________________
________________________________________________________________________________
________________________ ________________________________________________________
Autorul lucrării __________________________________________________________ ___
Lucrarea de finalizare a studiilor este elaborată în vederea susținerii examenului de finalizare
a studiilor organizat d e către Facultatea ________________________________________ _____
_____________________________________________________ din cadrul Universității din
Oradea, sesiunea_______________________ a anului universitar ____________.
Prin prezenta, subsemnatul (nume , prenume, CNP) _____________________________ ___
___________________________________________________________________________ _____
_____________________________________________________________________________ ___,
declar pe proprie răspundere că această luc rare a fost scrisă de către mine, fără nici un ajutor
neautorizat și că nici o parte a lucrării nu conține aplicații sau studii de caz publicate de alți autori.
Declar, de asemenea, că în lucrare nu există idei, tabele, grafice, hărți sau alte surse folos ite
fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.
Oradea,
Data Semnătura
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Licenta Gal Iulian 3 [630234] (ID: 630234)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
