FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT IOAN SLAVICI TIMIȘOARA [303575]

FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT “IOAN SLAVICI” TIMIȘOARA

UNIVERSITATEA “IOAN SLAVICI” [anonimizat]. MIRCEA VLĂDUȚIU

ABSOLVENT: [anonimizat]

2016

FUNDAȚIA PENTRU CULTURĂ ȘI ÎNVĂȚĂMÂNT “IOAN SLAVICI” TIMIȘOARA

UNIVERSITATEA “IOAN SLAVICI” [anonimizat]. MIRCEA VLĂDUȚIU

ABSOLVENT: [anonimizat]

2016

UNIVERSITATEA DIN ORADEA

FACULTATEA de Inginerie Electrică și Tehnologia Informației

DEPARTAMENTUL Calculatoare și tehnologia informației

DEMO DE JOC PE CALCULATOR

Proiectul de Finalizare a studiilor a student: [anonimizat]

1). Tema proiectului de finalizare a studiilor: Crearea unui joc demonstrativ pe calculator în C# cu ajutorul motorului Unity3D.

2). Termenul pentru predarea proiectului de diplomă 10 iulie 2016.

3). Elemente inițiale pentru elaborarea proiectului de finalizare a studiilor scripting în C#, motor de joc pentru platforme multiple Unity3D.

4). Conținutul proiectului de finalizare a studiilor: un joc pe calculator constituit dintr-o [anonimizat].

5). Material grafic: [anonimizat]3D.

6). Locul de documentare pentru elaborarea proiectului de diplomă: cărți de programare în C#, tutoriale pentru Unity3D.

7). Data emiterii temei: 20 octombrie 2015

Coordonator științific

Prof. Dr. Ing. Mircea Vlăduțiu

REFERAT

PRIVIND PROIECTUL DE DIPLOMĂ

A

ABSOLVENT: [anonimizat] : Suciu Mirela

DOMENIUL Calculatoare și tehnologia informației

SPECIALIZAREA Tehnologia informației

PROMOȚIA 2016

Titlul proiectului: DEMO DE JOC PE CALCULATOR

Structura proiectului: Lucrarea este structurată pe șase capitole:

I Introducere

II Fundamentare teoretică pentru aplicație

III Specificațiile aplicației

IV Documentația tehnică a aplicației

V Rularea aplicației

VI Concluzii și dezvoltări ulterioare

Aprecieri asupra conținutului proiectului de DIPLOMĂ (finalizare a studiilor), [anonimizat], actualitate, deficiențe

Lucrarea se caracterizează printr-o construcție echilibrată cu o [anonimizat], între care există o bună coerență. Aceasta conține o parte aplicativă consistentă implicând soluții cu caracter de originalitate software.

Aprecieri asupra proiectului (se va menționa: [anonimizat], calitatea și diversitatea surselor consultate; modul în care absolvent: [anonimizat], totuși investigația de literatură de specialitate este limitată. Sursele bibliografice sunt alese în mod corespunzător.

(se va menționa: opțional locul de documentare și modul în care absolvent: [anonimizat] 12 [anonimizat].

Concluzii ([anonimizat]eprins, competențele absolventului, rigurozitatea pe parcursul elaborării proiectului, consecvența și seriozitatea de care a dat dovadă absolventul pe parcurs)

În baza celor menționate mai sus apreciez lucrarea elaborată de absolventă ca fiind foarte valoroasă, bazându-se pe un amplu studiu de literatură de specialitate și absolventa dovedind reale competențe în domeniul calculatoarelor.

Redactarea proiectului respectă ………………………………………………….cerințele academice de redactare (părți, capitole, subcapitole, note de subsol și bibliografie).

Consider că proiectul îndeplinește/ nu îndeplinește condițiile pentru susținere în sesiunea de Examen de LICENȚĂ (finalizare a studiilor) din IULIE 2016 și propun acordarea notei ………………

Oradea,

Data Conducător științific

Prof. Dr. Ing Mircea Vlăduțiu

Cuprins

Pagina

Cap. I Introducere 8

I.1 Contextul abordării 8

I.2 Structura lucrării 8

Cap. II Fundamentare teoretică pentru aplicație 9

II.1 Despre motorul de joc Unity 9

II.2 Elemente ale limbajului de programare C# 10

II.3 Mediul de dezvoltare integrat MonoDevelop 12

Cap. III Specificațiile aplicației 14

III.1 Obiectivele aplicației..……………………………………………………….……14

III.2 Componentele aplicației…………………………………………………………..15

Cap. IV Documentația tehnică a aplicației 18

IV.1 Structura generală 18

IV.2 Componentele motorului de joc Unity 19

IV.2.1 Scene 19

IV.2.2 Ierarhie 20

IV.2.3 Inspector 22

IV.2.4 Vederea jocului 23

IV.2.5 Obiecte de joc 24

IV.2.6 Scripting 27

IV.3 Caracterul jucătorului. ..30

IV.4 Inamicii ……………………………………………………………………………42

IV.5 Planșa jocului 47

Cap. V Rularea aplicației 55

Cap. VI Concluzii și dezvoltări ulterioare 58

Bibliografie 59

Cap. I Introducere

I.1 Contextul abordării

În ziua de azi, oamenii petrec din ce în ce mai mult timp în fața calculatorului, televizorului și a telefonului mobil. Fie că sunt la lucru, școală sau acasă, calculatorul a devenit o foarte importantă parte din viața noastră. Jocurile video au devenit o parte din rutina copilăriei și adolescenței, dar nu numai. În ziua de astăzi, jocurile pe calculator sunt din ce în ce mai răspândite și mai variate, făcându-se competiții cu premii foarte mari (de exemplu Dota premiul I cel mai mare a fost de 6 milioane de dolari), având o ligă a campionilor în care în fiecare sezon se fac eliminari (de exemplu League of Legends). Dar sunt, de asemenea, foarte frecvent criticate de către părinții în cauză cu privire la potențialele daune cauzate prin expunerea copiilor la un conținut neadecvat.

Dar cu toate acestea, unii cercetători spun că jocurile video pot fi utilizate în scopuri educaționale. Deoarece sunt foarte populare în rândul tuturor, jocurile video au un potențial foarte mare în a ne ajuta să deprindem abilități de care au nevoie pentru a reuși mai departe în viață.

Mai multe studii realizate de-a lungul ultimilor ani indică faptul că jocurile video ne pot ajuta să dezvoltăm abilități emoționale și intelectuale esențiale care susțin realizările academice.

În timp ce copiii se distrează, deprind abilități și competențe prin rezolvarea problemelor, gândire critică, matematică și limbă. De asemenea, copiii pot învăța să fie mai creativi, să dezvolte abilități sociale și de colaborare prin interacțiunea cu alți jucători, să dezvolte abilități de rezolvare a problemelor și multe altele. Cu alte cuvinte jocurile video pot fi și educaționale nu doar distractive.

I.2 Structura lucrării

Lucrarea este alcătuită din 6 capitole (Introducere, Fundamentare teoretică pentru aplicație, Specificațiile aplicației, Documentația tehnică a aplicației, Rularea aplicației, Concluzii si dezvoltări ulterioare), fiecare capitol având două sau mai multe paragrafe, cu excepția capitolelor V și VI.

Aplicația are ca obiectiv punerea în valoare a modalităților de creare a unui joc pe calculator, cât și de a-i atrage pe cei neinteresați prin grafică, caracter plăcut și inamici inteligenți. Proiectarea generală are ca scop implementarea unui mod de joc intuitiv având obiectivul de a fugi și a învinge inamicii. Pentru a face acest lucru utilizatorul trebuie să își folosească aptitudinile sale pentru a controla direct caracterului jocului prin câteva butoane de la tastatură și mouse.

Abilitățile puse la încercare sunt capacitatea de concentrare, de gândire și atenția distributivă asupra mai multor elemente prezente de-odată pe ecranul jocului.

Cap. II Fundamentare teoretică pentru aplicație

II.1 Despre motorul de joc Unity

Fig. 1

Fig. 1 reprezintă sigla Unity.

Unity3D este un motor de joc pentru multiple platforme, dezvoltat de Unity Technologies și este folosit la dezvoltarea de jocuri video pentru PC, console, dispozitive mobile și site-uri. A fost anunțat doar pentru Mac OS, la Worldwide Developers Conference Apple în 2005, aceasta fiind extinsă pentru a viza mai mult de cincisprezece platforme.

Începând cu versiunea lansată în 3 Martie 2015, Unity 5.0 a devenit complet gratuit, inclusiv toate caracteristicile, mai puțin codul sursă și suportul. Unity este de remarcat pentru capacitatea de a ținti jocurile la mai multe platforme.

Cu accent pe portabilitate, motorul vizează următoarele API-uri: Direct3D pe Windows și Xbox 360; OpenGL pe Mac, Windows, Linux și; OpenGL ES pe Android și iOS; și API-uri de proprietate pe console de jocuri video. Unity permite specificarea setărilor de compresie și de rezoluție a texturilor, pentru fiecare platformă de joc sprijină și oferă suport pentru cartografierea bump, cartografierea reflecției, cartografiere paralaxă, ecran ocluzie spațiu înconjurător (SSAO), umbre dinamice folosind hărți de umbre, render-to-texture și post-procesare full-screen. Diversitatea motorului grafic poate oferi un shader cu mai multe variante și o specificație de rezervă declarativă, permițând Unity să detecteze cea mai bună variantă pentru hardware-ul video curent și dacă nu sunt compatibile, schimbă înapoi la un shader alternativ care ar putea sacrifica din caracteristicile de performanță.

Ultima versiune de Unity adaugă mult anticipata iluminare globală în timp real bazată pe tehnologia Geometrics Enlighten. Alte schimbări majore includ physically-based shaders, HDR sky-boxes, sonde cu reflecție, un nou mixer audio cu efecte și o nouă unealtă îmbunătățită pentru crearea de animații. Unity a introdus pe parcurs și opțiunea de a dezvolta jocuri video 2D astfel încât timpul necesar realizării jocului fiind redus considerabil. Unitatea acceptă două limbaje de programare nativ: C #, un limbaj standard în industrie similar cu Java sau C ++ și UnityScript, un limbaj special conceput pentru utilizarea cu unitatea și modelat după JavaScript.

Unitatea este notabilă pentru capacitatea sa de a viza jocurile la mai multe platforme. În cadrul unui proiect, dezvoltatorii au control asupra livrării de dispozitive mobile, browsere web, desktop-uri și console. Platformele suportate includ BlackBerry 10, Windows Phone 8, Windows, OS X, Linux (Ubuntu în special), Android, iOS, Unity Web Player (inclusiv Facebook), Adobe Flash, PlayStation 3, PlayStation 4, PlayStation Vita, Xbox 360, Xbox One, Wii U, 3DS New și Wii. Acesta include și un motor de fizică Nvidia PhysX. Unity Web Player este un plugin de browser care este acceptat doar pentru Windows și OS X. Unity este un kit de dezvoltare software standard (SDK) pentru Wii U consola de jocuri video de la Nintendo, cu un exemplar gratuit inclus de Nintendo pentru fiecare licență de dezvoltator de Wii U. Unity Technologies numește această gruparea cu SDK o "premieră" în industrie.

Unity este compus din trei părți:

Un motor de joc: acesta permite crearea de jocuri, testarea și jucarea lor în diferite medii.

O aplicație unde designul sau interfața cu utilizatorul este pus împreună cu o opțiune de previzualizare grafică și funcția de redare de control.

Un editor de cod: IDE oferă un editor de text pentru a scrie cod. Cu toate acestea, un editor de text separat este adesea folosit pentru a evita confuzia.

Unity este o platformă excelentă pentru a începe dezvoltarea de jocuri video și cu siguranță recomandat pentru cei care doresc să înceapă o carieră în acest domeniu aflat în plină expansiune. Unity oferă numeroase tutoriale bazate pe exemple video care familiarizează dezvoltatorul cu procesul realizării unui joc video. [1][2][3][4][5]

II.2 Elemente ale limbajului de programare C#

Numele limbajului C# a fost inspirat din notația ♯ (diez) din muzică, care indică faptul că nota muzicală urmată de ♯ este mai înaltă cu un semiton. Este o similitudine cu numele limbajului C++, unde ++ reprezintă atât incrementarea unei variabile cu valoarea 1, dar și faptul că C++ este mai mult decât limbajul C.

Limbajul C# a fost dezvoltat în cadrul Microsoft. Principalii creatori ai limbajului sunt Anders Hejlsberg, Scott Wiltamuth și Peter Golde. Prima implementare C# larg distribuită a fost lansată de către Microsoft ca parte a inițiativei .NET în iulie 2000. Din acel moment, se poate vorbi despre o evoluție spectaculoasă. Mii de programatori de C, C++ și Java, au migrat cu ușurință spre C#, grație asemănării acestor limbaje, dar mai ales calităților noului limbaj. La acest moment, C# și-a câștigat și atrage în continuare numeroși adepți, devenind unul dintre cele mai utilizate limbaje din lume.

Creatorii C# au intenționat să înzestreze limbajul cu mai multe facilități. Succesul de care se bucură în prezent, confirmă calitățile sale:

Este un limbaj de programare simplu, modern, de utilitate generală, cu productivitate mare în programare.

Este un limbaj orientat pe obiecte.

Permite dezvoltarea de aplicații industriale robuste, durabile.

Oferă suport complet pentru dezvoltarea de componente software, foarte necesare de pildă în medii distribuite. De altfel, se poate caracteriza C# ca fiind nu numai orientat pe obiect, ci și orientat spre componente.

La aceste caracteristici generale se adaugă și alte trăsături, cum este de pildă suportul pentru internaționalizare, adică posibilitatea de a scrie aplicații care pot fi adaptate cu ușurință pentru a fi utilizate în diferite regiuni ale lumii unde se vorbesc limbi diferite, fără să fie necesare pentru aceasta schimbări în arhitectura software.

În strânsă legătură cu Arhitectura .NET (.NET Framework) pe care funcționează, C# gestionează în mod automat memoria utilizată. Eliberarea memoriei ocupate (garbage collection) de către obiectele care nu mai sunt necesare aplicației, este o facilitate importantă a limbajului. Programatorii nu mai trebuie să decidă singuri, așa cum o fac de pildă în C++, care este locul și momentul în care obiectele trebuie distruse.

În C# se scriu de asemenea aplicații pentru sisteme complexe care funcționează sub o mare varietate de sisteme de operare, cât și pentru sisteme dedicate (embeded systems). Acestea din urmă se întind pe o arie largă, de la dispozitive portabile cum ar fi ceasuri digitale, telefoane mobile, MP3 playere, până la dispozitive staționare ca semafoare de trafic sau controlere pentru automatizarea producției.

Din punct de vedere sintactic C# derivă din limbajul C++, dar include și influențe din alte limbaje, mai ales Java[6][7][11][12].

C# este unul dintre cele două limbaje de programare acceptate de către Unity pentru scripting.

Fig. 2

În fig.2 am prezentat un exemplu de cod scris în limbajul de programare C#.

Cu ajutorul scripturilor în Unity scrise in C# se pot face multe lucruri, de la controlarea obiectelor mediului jocului la controlarea directă a caracterului jucătorului prin intermediul mouse-ului sau a tastaturii.

Fig. 3

În fig. 3 este prezentat un model de script ce este o componentă a obiectului ,,Main Player’’ în Unity3D

III. Mediul de dezvoltare integrat MonoDevelop

MonoDevelop este un mediu de dezvoltare integrat sursă-deschisă pentru Linux, OS X și Windows. Accentul său principal este dezvoltarea de proiecte care folosesc framework-urile Mono și .NET. MonoDevelop integrează caracteristici similare cu cele ale lui NetBeans și Microsoft Visual Studio, cum ar fi completarea automată a codului, controlul sursei, o interfață grafică cu utilizatorul (GUI) și Web designer. MonoDevelop integrează un designer Gtk # GUI numit Stetic. Acesta susține Boo, C, C ++, C #, CIL, D, F #, Java, Oxygene, Python, Vala, și Basic.NET Visual.

MonoDevelop poate fi folosit pe Windows, OS X și Linux. Primele două au fost sprijinite în mod oficial de la versiunea 2.2. Xamarin oferă o versiune îmbunătățită de MonoDevelop 4.0 ca și Xamarin Studio care folosește acum cod platforma specific în diferite locuri pentru a spori aspectul. În timp ce Mono oferă un pachet pentru Solaris 10 rulând pe SPARC, pachete de MonoDevelop pentru OpenSolaris sunt furnizate numai de grupuri din comunitate OpenSolaris. MonoDevelop pe FreeBSD este de asemenea susținută doar de comunitatea FreeBSD.

O versiune personalizată a MonoDevelop este integrată în Unity, motor de joc realizat de către Unity Technologies[8].

Fig. 4

În fig. 4 este prezentat un model de script scris în C# în mediul de dezvoltare integrat al lui Unity, MonoDevelop.

Cap. III Specificațiile aplicației

III.1 Obiectivele aplicației.

În cadrul acestui subcapitol vor fi prezentate viitoarele funcționalități și obiecte ale aplicației.

Aplicația are ca obiectiv punerea în valoare a modalițăților de creare a unui joc pe calculator, cât și de a-i atrage pe cei neinteresați prin grafică, caracter plăcut și inamici inteligenți.

Fig. 5

În fig. 5 se prezintă grafica și mediul jocului, având-o pe amazoană în prim plan.

Proiectarea generală are ca scop implementarea unui mod de joc intuitiv având obiectivul de a fugi și a învinge inamicii. Pentru a face acest lucru utilizatorul trebuie să își folosească aptitudinile sale pentru a controla direct caracterului jocului prin câteva butoane de la tastatură și mouse.

Inamicii o vor urma pe amazoană oriunde s-ar duce, urcând obstacole și dacă ajung destul de aproape o vor lovi.

Fig. 6

În fig. 6 se prezintă cei doi inamici care îl urmăresc pe jucător și urcă o ușoară denivelare pentru a putea fugi după el.

III.2 Componentele aplicației.

Jocul este construit dintr-o scenă alcătuită din planșa jocului, mediul înconjurător, caracterul și inamicii.

Caracterul jucătorului – elementul principal al aplicației care este controlat direct de către utilizator prin intermediul butonului din stânga al mouse-ului, iar pentru a ataca se folosește butonul din dreapta. Cu ajutorul butoanelor 1, 2, 3 și 0 jucătorul poate schimba armele, fiecare buton reprezentând câte o armă diferită, iar cu ajutorul butoanelor n și m poate alege dacă amazoana să fie în modul pașnic sau de luptă.

Fig. 7

În fig.7 se prezintă modelul jucătorului, reprezentat printr-o amazoană.

Obstacolele – sunt reprezentate de copaci. Sunt obiecte statice care trebuiesc ocolite atât de jucător cât și de inamici.

Fig. 8

În fig. 8 este prezentat unul dintre copacii folosiți în joc.

Inamicii – sunt doi scheleți care îl vor urmări pe jucător oriunde s-ar duce pe planșă, fiind controlați prin agentul de navigație al motorului de joc Unity.

Fig. 9

În fig. 9 este prezentat modelul scheleților din joc.

Cap. IV Documentația tehnică a aplicației

IV.1 Structura generală

Întreaga aplicație a fost dezvoltată cu ajutorul motorului de joc Unity, care oferă un mod mai simplist pentru realizarea unei aplicații de acest gen prin diferite unelte ajutătoare. În industria jocurilor video se lucrează în echipe medii, mari și foarte mari de oameni, deoarece un joc video implică foarte mulți factori și ar fi nevoie de foarte mult timp pentru o singură persoană să finalizeze un joc. Dar cu ajutorul motoarelor de joc ca și Unity, proiecte foarte mici, de genul aplicației în cauză, au ajuns să fie realizabile prin intermediul unui mod de lucru simplificat, o documentație foarte bine pusă la punct și multitudinea de tutorialelor disponibile online.

În continuare se vor prezenta părțile importante al acestui motor de joc, uneltele și elementele folosite cu scopul realizării aplicației interactive sau mai simplu spus, jocului video pentru dezvoltarea abilităților copiilor printr-un mod de joc simplu și distractiv.

Unul dintre cele mai importante elemente cu ajutorul căruia se creează un joc în Unity este un Game Object sau obiect de joc. Fiecare componentă a jocului implică un obiect de joc căruia i se pot atribui diferite componente, după cum ar fi: componentă de poziție, scripturi C# sau UnityScript, texturi grafice, elemente audio, animații și elemente de fizică.

Fig. 10

În fig. 10 se prezintă modul de organizare a fișierelor în cadrul motorului Unity3D.

IV.2 Componentele motorului de joc Unity

IV.2.1 Scene

Aplicația este constituită dintr-o scenă, motorul putând rula doar câte o scenă pe rând. Astfel între scene sunt create legături cu ajutorul unor scripturi sau elemente de interfață cu utilizatorul (UI buttons).

Cu ajutorul ferestrei ,,Scene” se poate controla direct cum va arăta jocul în varianta finală. Aici se pot poziționa obiectele de joc. În cazul acestei aplicații se lucrează doar în două dimensiuni, obiectele fiind asociate unor coordonate X și Y, coordonata Z fiind inițializată cu 0, dar pentru un control mai bun asupra obiectelor se poate modifica și coordonata Z. Tot aici se poate modifica poziționarea camerei cu ajutorul coordonatelor X,Y și Z.

Fig. 11

Fig. 11 prezintă vederea scenei în Unity3D.

IV.2.2 Ierarhie

Pentru o mai bună organizarea a proiectului Unity pune la dispoziție o ierarhie sub formă de listă text a obiectelor din scena curentă prin căsuța numită ,,Hierarchy”. Obiectele au fost organizate în funcție de categoria lor sau de modul în care funcționează împreună cu alte obiecte. Obiectele care aparțin unui alt obiect, va prelua automat din atributele părintelui, de exemplu poziționarea lor va fi legată.

Fig. 12

Fig. 12 prezintă componentele jocului în Unity.

De asemenea există și o organizare a fișierelor folosite în aplicație prin intermediul căsuței numită ,,Project”.

Fig. 13

Fig. 14

Această organizare poate fi modificată după bunul plac pentru a eficientiza utilizarea lor, fapt demonstrat cu ajutorului fig.13 și fig. 14.

IV.2.3 Inspector

Reprezentată prin căsuța numită ,,Inspector” care specifică pentru fiecare obiect de joc în parte toate informațiile despre acesta. Sunt prezentate informații despre: numele obiectului, tipul obiectului, coordonatele X,Y,Z, eticheta pe care o are, layer-ul din care face parte și componentele asignate. Componentele ce pot fi asignate sunt: script C# sau UnityScript, componente audio, componente de fizică cum ar fi figuri geometrice, texturi grafice sau materialul din care este construit obiectul respectiv.

Fig. 15

În fig. 15 este prezentat inspectorul caracterului nostru din Unity.

IV.2.4 Vederea jocului

Aceasta este reprezentată prin fereastra numită ,,Game View” care afișează varianta jocului care va fi văzută de către utilizatori. Cu alte cuvinte reprezintă varianta finală care include toate elementele grafice afișate în timp ce aplicația va rula.

Tot prin intermediul acestei ferestre, apăsând butonul de rulare de deasupra ei, se va face testarea directă a aplicație. Acest lucru este un atu foarte mare al acestui motor de joc, deoarece dezvoltatorii pot testa direct rezultatul final al muncii lor facilitând astfel rezolvarea erorilor și problemelor care pot apărea pe parcurs.

Fig. 16

În fig. 16 este reprezentată vederea jocului prin fereastra ,,Game View’’.

IV.2.5 Obiecte de joc

Toate elementele pe care le conține o scenă sunt, fie un obiect de joc, fie o componentă a unui obiect de joc. Fiecare obiect de joc (game object) are cel puțin o componentă care se numește ,,Transform” și care conține coordonatele poziției, mărimea și rotația obiectului. Alte componente depind de tipul obiectului, care pot fi: audio, meșe, materiale, scripturi etc.

În continuare vor fi prezentate câteva dintre cele mai importante și utilizate componente ale obiectelor de joc.

Grafica (Graphics) – reprezintă partea vizuală cu care interacționează utilizatorul. Elementele de grafică sunt reprezentate prin fișiere ,,png” care pot fi importate în Unity sub formă de fișiere numite ,,sprites”. Pe scurt, în cazul jocurilor 2D, acestea sunt imagini care alcătuiesc lumea de joc, platformele, inamicii, monedele de colectat, fundalul și cel mai important, caracterul jucătorului.

Fig. 17

În fig.17 este prezentat un exemplu de obiecte de grafică folosite în joc.

Fizica (Phisics) – pentru un comportament fizic cât mai convingător, obiectele de joc pot fi afectate de fizică, adică gravitație, coliziunea cu alte obiecte sau alte forțe. Unity dispune de două simulatoare de fizică realistă, unul pentru jocurile 3D și unul pe cele 2D. Forțele care afectează lumea de joc diferă de la un obiect la altul, de exemplu caracterul jucătorului este afectat de gravitație, pe când inamicii nu sunt.

Un exemplu de componente de fizică pot fi observate în Fig. de mai jos, care reprezintă un obiect de tip monedă. Acesta dispune de două componente fizice, un ,,Rigidbody 2D” care face ca obiectul să fie rigid, dar cu o gravitație 0, și un ,,Circle Collider 2D” care delimitează zona de coliziune cu alte obiecte a lumii de joc. În acest fel cu ajutorul unui script moneda va fi dezactivată de pe ecranul de joc în momentul în care intră în coliziune cu caracterul jucătorului. Acest tip de coliziune este folosit și în cazul interacțiunii caracterului cu inamicii.

Fig. 18

În fig.18 este prezentată o componentă a unui obiect din joc.

Animațiile – o animație ,,Animator” constituie o iluzie optică a mișcării, creată prin derularea unor imagini reprezentând elemente statice ale acesteia. În Unity se pot crea cu ajutorul ferestrei numite ,,Animator”, unde se pot specifica când și care imagine (sprite) să se deruleze. Au fost folosite două animații în acest proiect, o animație pentru caracterul jucătorului și o animație pentru inamici. Animația pentru inamici este facută cu ajutorului componentei ,,Animation’’. Diferența dintre ,,Animator’’ și ,,Animation’’ este faptul ca ,,Animator’’-ul este mai nou și, începând cu Unity 4.0, ,,Animation’’-ul nu mai este foarte mult folosit deoarece comportamentul său este mai predispus la bug-uri.

Fig. 19

În fig.19 este prezentat un exemplu de tabel de stări cu animații.

În figurile 19 și 20 se demonstrează diferența dintre ,,Animator’’ și ,,Animation’’. ,,Animator’’ se face printr-un tabel de stări, iar ,,Animation’’ se face printr-o listă de proprietăți.

Fig. 20

În fig.20 se prezintă un exemplu de vector de animații din cadrul jocului.

Prefabs – aceste obiecte sunt specifice motorului de joc Unity, care constituie o declarare a unui obiect pentru a putea fi refolosit ori de câte ori este nevoie și care conține exact aceeași structură ca și obiectul inițial. De exemplu se folosește un prefab pentru a crea mai mulți copaci.

Fig. 21

În fig.21 sunt prezentate prefab-urile folosite în aplicație.

Tags & Layers (etichete și straturi) – sunt elemente care ajută la o organizare mai bună a obiectelor dintr-o scenă și interacțiunile dintre ele. Un tag sau etichetă ajută la împărțirea obiectelor de joc în diverse categorii, care mai apoi pot fi apelate foarte ușor în scripturi prin folosirea atributului tag al clasei gameObject. Un layer sau strat ajută la categorisirea elementelor care nu vor interacționa între ele și la o ordine a layer-elor care va fi afișată pe ecran de joc.

Fig. 22

Fig. 23

În fig.22 și fig. 23 sunt prezentate două exemple de ,,Tags & Layers’’

IV.2.6 Scripting

Reprezintă una din cele mai importante părți al dezvoltării de jocuri video folosind motorul de joc Unity. Cu ajutorul scripturilor care pot fi scrise fie în C#, fie în UnityScript care este asemănător cu JavaScript, se poate influența lumea jocului în orice mod gândit.

Pentru realizarea acestei aplicații scripturile au fost scrise în limbaj C# cu ajutorul modulului MonoDevelop din Unity. Acestea sunt mai apoi adăugate ca și componente ale obiectelor din joc.

Fig. 24

În fig. 24 este reprezentată componenta scriptului ,,CamTarget’’.

Acest script este o componentă a obiectului ,,CameraTarget” care controlează camera jocului.

Fig. 25

În Fig. 25 este prezentat scriptul ,,CameraTarget’’

Se poate observa scriptul care face camera jocului să gasească jucătorul. Acesta a fost scris cu ajutorul unuia dintre multitudinea de tutoriale disponibile pe site-ul celor de la Unity și nu numai.

În Fig. de mai jos se află un exemplu de script mai complex care conține două funcții. Pentru a realiza acest script este nevoie de cunoștințe avansate de programare și despre cum funcționează motorul de joc, dar cu ajutorul documentație disponibile online se poate înțelege modul în care funcționează.

În întreaga aplicație au fost folosite 7 scripturi care au menirea de a defini modul de joc.

Scriptul ,,Mouse Orbit” este folosit de obiectul camerei pentru a putea urmări constant caracterul. Cu ajutorul său este posibil să facem zoom in sau zoom out și să învârtim camera pentru a putea observa caracterul și mediul din diferite unghiuri. Zoom se face cu ajutorul rotiței de la mouse, iar învârtirea se face ținând apasată tasta ,,Alt’’ și mișcând mouse-ul. Aceste două comenzi pot fi efectuate chiar dacă jucătorul este în mișcare sau atacă.

Fig. 26

Fig. 26 prezintă o parte a scriptului ,,Mouse Orbit”.

IV.3 Caracterul jucătorului

Obiectul controlat de jucător este reprezentat printr-o amazoană și arată astfel:

Fig. 27

În fig.27 este prezentat modelul jucătorului

Obiectul care controlează, afișează și modifică atributele celui mai important element al aplicației, și anume caracterul jucătorului, în funcție de interacțiunea cu celelalte obiecte ale jocului.

Fig. 28

Fig. 28 prezintă componentele obiectului jucător.

Obiectul jucător conține un animator, un corp rigid de tip componentă de coliziune capsulă, o componenta de navigare, două componente de tip script și o componenta de tip ,,Light”.

Fig. 29

Fig 29 prezintă componenta ,,Nav mesh agent” a jucătorului din cadrul ierarhiei cu obiecte a jucătorului.

Componenta ,,Nav mesh agent” este folosită pentru a determina platforma jocului, locurile pe unde pot umbla sau nu obiectele jocului (jucătorul si inamicii). Când îi dăm unui obiect o astfel de componentă, acesta devine înconjurat de un cilindru verde. A nu se confunda cu una dintre celelate componente, anume cea de coliziune de tip capsulă.

Fig. 30

Fig. 30 prezintă componenta ,,Nav mesh agent” a jucătorului vazută din scena jocului.

Componenta ,,Capsule Collider’’ este folosită pentru a determina coliziunea dintre jucător și mediul înconjurător.

Fig. 31

Fig. 31 prezintă componenta capsule collider a jucătorului vazută din ierarhia cu obiecte a jucătorului.

Dacă îi dăm unui obiect o componentă de acest tip trebuie să încercăm să o facem să cuprindă tot obiectul respectiv pentru a face hitbox-ul cât mai aproape de realitate. Acest lucru se poate face modificând atributele ,,Radius” și ,,Height” ale componentei. ,,Direction: Y-Axis” înseamnă ca va fi în poziție verticală, iar ,,Center’’ este punctul de origine al componentei.

Fig. 32

Fig. 32 ne arată modul în care este reprezentată componenta ,,Capsule Collider’’ în scena jocului. Făcând comparație între figurile 30 și 32, putem observa similarități între ele, așadar să nu se confunde.

Componenta ,,Animator’’ determină ce mișcări va face obiectul respectiv la diferite momente din joc sau la apelarea diferitelor comenzi.

Fig. 33

În fig. 33 este prezentată componenta animator a jucătorului.

Fig. 34

În fig. 34 este prezentată componenta animator a jucătorului cu ajutorul stărilor.

,,Entry state’’ determină cum se va comporta obiectul în primul moment al rulării jocului. ,,Exit’’ sugerează momentul când se iese din joc. ,,Any state’’ cu săgeata către ,,Exit’’ determină faptul că jucătorul poate muri în orice stare s-ar afla. ,,Weapon State’’ determină ce armă are la dispoziție jucătorul. Armele pe care le poate avea jucătorul sunt ,,Unarmed’’, ,,1HandedWeapon’’, ,,2Handed’’ și ,,Bow’’. Celelalte arme sunt inaccesibile, chiar dacă există, deoarece nu există săgeata de la ,,WeaponState’’ către ele. Cu ajutorul unui script jucătorul poate schimba armele când dorește.

Scriptul ,,Character Demo Controller’’ este scriptul pe care îl folosim pentru toate mișcările pe care le face jucătorul.

Fig. 35

În fig. 35 este prezentată o parte a scriptului ,,Character Demo Controller’’

Funcțiile din figură sunt funcții care există întotdeauna în orice script din Unity. Funcția ,,Start’’ este cea care determină ce face obiectul în primul moment al rulării programului. Setează animatorul pe modul default definit în componenta prezentată anterior, setează punctul default în care se află jucătorul și indică faptul că jucătorul nu este în modul de luptă.

Metoda ,,Update’’ se apelează la fiecare frame și, în cazul nostru, determină punctul în care s-a dat click pentru ca jucătorul să meargă în locul respectiv. Destinația se determină cu o eroare cât mai mică posibilă astfel încât jucătorul să ajungă cât mai aproape de locul dorit. Nu este bine ca locul destinației să fie exact deoarece jucătorul se va tot mișca în cerc până va determina locul exact, putându-se crea chiar și un loop infinit. ,,wasAttacking = false;’’ se folosește deoarece cât timp caracterul se deplasează nu poate ataca.

Fig. 36

La prima rulare a programului, amazoana se va afla în această poziția de ,,idle’’ prezentată în Fig. 36.

Această parte de cod determină ce armă vrea să folosească jucătorul, precum și faptul dacă se află sau nu în modul de luptă. Cu butoanele de la tastatură 0, 1, 2, 3 se pot schimba armele, iar n și m schimbă modul. Codul determină unde se află jucătorul și, dacă atacă, trebuie să rămână în poziția curentă și direcția în care atacă.

Fig. 37

În fig. 37 este prezentată o parte din scriptul ,,Character Demo Controller’’.

Figurile 38 și 39 reprezintă jucătorul în modurile de atac și de așteptare având ca armă cuțitul. Acest lucru se face apăsând butonul 1 de la tastatură.

Fig. 38

Fig. 39

Dacă se apasă butonul 2, arma se va schimba într-o sabie cu două tăișuri. Observăm că și atitudinea amazoanei se schimbă.

Fig. 40

Fig. 41

Butonul 3 reprezintă arcul pentru a doborâ inamicii de la distanță. Animațiile se schimbă de asemenea.

Fig. 42

Fig. 43

Butonul 0 nu are nici o armă atașată pentru a demonstra faptul că amazoana noastră este vigilentă indiferent de situație.

Fig. 44

l

Fig. 45

Scriptul ,,Outfitter’’ este ultima componentă a obiectului. Rolul său este de a determina arma curentă și de a apela animatorul din scriptul ,,Character Demo Controller’’ pentru a putea folosi animația corectă a armei respective[11][12].

Fig. 46

În fig. 46 este prezentată o parte din scriptul ,,Outfitter’’.

IV.4 Inamicii

Obiectele de tip inamici sunt reprezentate prin scheleți. Aceștia vor urmări caracterul oriunde s-ar duce pe planșă și când ajung destul de aproape vor începe să lovească jucătorul.

Fig. 47

În fig. 47 este prezentat modelul inamicilor

Fig. 48

Funcția ,,Update()’’ din Fig. 48 verifică la fiecare frame cu ajutorul funcției inRange() dacă jucătorul este destul de aproape și îl atacă, altfel apelează funcția chase().

Dacă jucătorul este destul de aproape acesta va fi atacat de către inamici. Funcția ,,attack()’’ returnează doar animația folosită de obiectul inamicului pentru a ataca.

Fig. 49

În fig. 49 este prezentată o parte din scriptul ,,Mob’’, având funcțiile ,,chase()’’ și ,,inRange()’’.

Fig. 50

În fig. 50 este prezentată funcția ,,attack()’’ a scriptului ,,Mob’’

Putem observa în cadrul componentei scriptului ,,Mob’’ parametrii Speed, Range, Run, Idle etc. Acestea apar deoarece au fost definite în cadrul scriptului ca fiind valori publice și pot fi modificate de utilizator fără a se modifica scriptul pentru a observa mai ușor comportamentul obiectului respectiv la diferite valori.

Componenta ,,Mob”, script ce face parte din obiectul inamic:

Fig. 51

În fig.51 este prezentată componenta scriptului ,,Mob’’.

O componentă de tip ,,Character Controller’’ ca și cea din Fig. 49 este folosită pentru ca obiectele necontrolate de la tastatură sau de la mouse să se poată mișca în funcție de unele condiții date inițial și fară ajutor. În cadrul jocului nostru este folosit pentru ca inamicii să poată fugi după jucător. [10]

Fig. 52

În fig 52 este prezentată componenta ,,Character Controller’’ a obiectelor de tip inamic.

Parametrii Slope Limit, Step Offset, Skin Width determină peste ce fel de denivelare a mediului ar putea urca inamicii în timp ce fug după jucător. Acești parametri fac posibilă urmărirea jucătorului oriunde, ca și în următoarea figură

Fig. 53

Fig. 53 îi prezintă pe inamici urmărind jucătorul, urcând obstacole pentru a ajunge la acesta.

Spre deosebire de jucător, inamicii nu au tabel de stări al animatorului, deoarece folosesc animații. Fiecare animație poate fi apelată individual din script, nefiind nevoie ca stările să fie legate între ele. Size determină câte animații sunt definite pentru acest obiect, iar Element indicele animației.[9][10].

Fig. 54

Fig. 54 prezintă componenta ,,Animation’’ a obiectului inamic.

Componentele obiectului ,,inamic’’:

Fig. 55

Fig.55 prezintă componentele obiectului inamic.

IV.5 Planșa jocului

Lumea jocului este alcătuită dintr-o planșă, având unele denivelări și copaci. Spațiul pe care se poate umbla este delimitat de parametri invizibili. Obiectul ,,plane’’ este alcătuit din componentele Mesh Filter, Mesh Collider, Mesh Renderer și Terrain.

Mesh Filter specifică faptul că va lua o ,,plasă’’ pe care se vor așeza celelalte obiecte și o va pasa către Mesh Renderer pentru a o modifica după cum vrea programatorul să arate jocul. În alte cuvinte, Mesh Filterul este scheletul pe care se construiește lumea. [10]

În cadrul Mesh Renderer-ului putem defini materialele folosite pentru obiectele mediului și dacă obiectele respective vor avea sau nu umbre. [10]

Mesh Collider este folosit pentru a face obiectele să interacționeze între ele, iar cu ajutorul lui Terrain putem crea dealuri, munți etc. [10]

Fig. 56

Fig. 56 prezintă lumea jocului.

În Fig. 57 este reprezentat modelul obiectului de tip ,,plan’’.

Fig. 57

După ce modelăm lumea așa cum o dorim, pentru a defini locurile pe unde se poate umbla trebuie sa îi dăm ,,bake’’. Opțiunea de ,,bake’’ înseamnă a crea lumea care poate fi traversată.

Aceasta definește cât de mare vrem să fie unghiul maxim de înclinare peste care să poată să urce sau să coboare obiectele jocului, respectiv caracterul și inamicii.

Fig. 58

Fig. 58 prezintă opțiunea ,,bake’’ a motorului Unity3D.

Parametrii Agent Radius, Agent Height și Max Slope determină cât de mare poate fi unghiul maxim al terenului peste care poate trece un obiect al jocului. Step Height determină mărimea minimă a pasului unui obiect pentru a putea urca unghiul maxim. [10]

Fig. 59 demonstrează acest lucru prin faptul că atât caracterul, cât și inamicii nu pot coborâ sau urca acest ,,deal’’ datorită faptului că este prea abrupt.

Fig. 59

Opțiunea ,,bake’’ va face locurile peste care se poate naviga cu albastru, prezentate în Fig. 60.

Fig. 60

Copacii fac parte din mediu și sunt obiecte statice, care trebuie ocolite. În Fig. 61 sunt prezentați o parte din copacii existenți pe planșa noastră.

Fig. 61

Fig. 62

În fig. 62 observăm faptul că inamicii nu pot trece prin copaci pentru a ajunge la jucător.

Figurile 62 și 63 demonstrează faptul că nici inamicii, nici jucătorul nu pot trece prin obiecte de tip copac.

Fig. 63

Obiectele de acest tip sunt statice. După ce dăm bake la mediu, dacă ar fi să modificăm poziția unui copac, locul unde era copacul respectiv inițial va fi de netrecut, pe când prin copacul în sine se va putea trece.

Fig. 64

În cadrul figurii 64 observăm faptul că jucătorul nostru se află pe copac. În timpul jocului inamicii și amazoana vor putea trece prin acest copac.

Uitându-ne la Fig. 65 vom vedea că în locul unde a fost copacul este acum un perete invizibil prin care nu se poate trece. Pentru a rezolva această problemă este necesar să dăm bake din nou.

Fig. 65

În Fig. 63 este reprezentat un obiect de tip ,,copac’’. Sunt peste 20 de tipuri de copaci si de

tufișuri.

Prin parametrul ,,Scale’’ le putem modifica dimensiunile. Componenta ,,Mesh Renderer’’ reprezintă opțiunea de a da sau primi umbre, de a reflecta lumina sau de a primi lumină.

,,Capsule Collider’’ este folosit pentru a împiedica celelalte obiecte să treacă prin copaci, ei fiind obstacole statice[10].

Componenta obiectului ,,copac’’ arată astfel:

Fig. 66

În fig. 66 se prezintă componentele unui obiect ,,copac’’.

Cap V. Rularea aplicației

File -> Build Settings va apărea fereastra de rulare reprezentată în fereastra de mai jos

Fig. 67

În fereastra de rulare putem alege platforma și arhitectura pe care vrem să deploy-uim aplicația.

Motorul de joc Unity este unul foarte versatil, cu ajutorul lui putând crea aplicații și jocuri pentru Android, Mac, PC, Linux, iOS etc.

Dând build ne va apărea o fereastră pentru a determina locația unde să se pună executabilul creat în urma rulării programului.

Fig. 68

Pentru rularea executabilului se merge în folderul destinație și se dă dublu click pe aplicație.

Înainte de a ne juca putem alege setările de grafică pe care dorim să le aibă aplicația.

I

Fig. 69

În fig.69 se prezintă setările alese pentru rularea aplicației.

Pentru a merge mai departe, se apasă butonul ,,Play”, iar pentru a ieși din aplicație se apasă butonul ,,Quit”. După apăsarea butonului ,,Play”, va apărea o nouă fereastră standard din motorul de joc folosit, care atestă că aplicația în cauză a fost dezvoltată folosind motorul de joc Unity Ediția Personală care este gratuită pentru orice dezvoltator. Această fereastră este una intermediară de informare care durează doar câteva secunde în care apare sigla Unity.

Fig. 70

În fig.70 se prezintă fereastra de încărcare a jocului în Unity3D.

Cap. VI Concluzii și dezvoltări ulterioare

Aplicația realizată cu motorul de joc Unity este alcătuită dintr-o planșă ușor de navigat, îmbină un stil grafic simplist dar atractiv prin culorile vii ale mediului înconjurător. Caracterul jocului este ușor și intuitiv de controlat prin câteva butoane și mouse, este reprezentat printr-o amazoană având diferite arme pentru inamici, reprezentați prin scheleți.

Realizarea aplicației a fost foarte mult ușurată datorită utilizării unui motor de joc care a fost conceput cu scopul de a crea jocuri video și care vine cu un proces de dezvoltare foarte bine documentat. Acesta face ca industria de dezvoltare de jocuri video să fie mai accesibilă pentru programatorii începători prin multitudinea de tutoriale oferite online.

Un aspect foarte important al dezvoltării acestei aplicații foarte simpliste de acest gen este multitudinea de elemente pe care le poate conține, de la texturi grafice, efecte de particule, obiecte de joc asupra cărora acționează forțe fizice, până la scripturi dezvoltate în C# sau UnityScript care sunt destinate unor operații dintr-o gamă cât se poate de variată.

Proiectul a fost conceput pentru platforma Windows, care are nevoie de puțin spațiu de memorie și de resurse hardware minime. Pentru moment se sugerează rularea jocului cu setările de bază pentru experimentarea modului de joc la potențial maxim, altfel pot intervenii unele probleme, cum ar fi rezoluția prea mare.

Pe viitor aplicația va include mult mai multe planșe, mai mulți și mai diversificați inamici, un mod de a omorâ inamici sau de a fi omorât, un mod de a avansa în niveluri prin acumulare de experiență, iar cu fiecare nivel dobândit jucătorul devenind mai puternic și la fiecare 5 nivele să învețe câte un ,,skill’’ nou. Fiecare nivel nou și inamic nou vor avea un grad de dificultate mai mare decât cel precedent pentru a pune jucătorul într-o continuă provocare.

Pentru o diversitate cât mai mare, se vor adăuga inamici cu abilități diferite, de exemplu vrăjitori sau arcași, chiar și un animal de companie și misiuni în care trebuiesc rezolvate puzzle-uri matematic.

De asemenea se va mai adăuga și un mod de a customiza înfățișarea caracterului și un meniu de log-in și de opțiuni.

Bibliografie

[1] https://en.wikipedia.org/wiki/Unity_(game_engine) : reprezintă pagina de wikipedia a motorului de jocuri Unity 3D

[2] http://docs.unity3d.com/Manual/index.html : reprezintă manualul claselor, funcțiilor, componentelor ce sunt definite de Unity și pot fi folosite direct de utilizatori

[3] https://unity3d.com: reprezintă pagina oficială a motorului de joc Unity

[4] https://unity3d.com/learn: reprezintă pagina cu documentațiile oficiale și tutorialele făcute de cei de la Unity

[5] http://forum.unity3d.com: reprezintă forumul oficial al motorului Unity

[6] https://en.wikipedia.org/wiki/C_Sharp_(programming_language): reprezintă pagina limbajului de programare C#

[7] Constantin Gălățan și Susana Gălățan :„C# pentru liceu – Programare în Visiual C# 2008 Express Edition”, Editura ,, L&S INFO-MAT'', anul 2011

[8] http://www.monodevelop.com/documentation: reprezintă pagina de documentație a IDE-ului motorului Unity

[9] ,,Brackeys | Become a Developer” http://brackeys.com: reprezintă o pagină de tutoriale pentru Unity

[10] Joe Hocking Paperback: ,,Unity in Action: Multiplatform Game Development in C# with Unity5", Editura ,,Manning Publications Co'', anul 2015

[11] Jennifer Greene, Andrew Stellman: ,,Head First C#, 3rd Edition", Editura ,, O'Reilly Media'', anul 2013

[12] Joseph Albahari, Ben Albahari: ,,C# 5.0 in a Nutshell: The Definitive Reference", Editura ,, O'Reilly Media'', anul 2012

DECLARAȚIE DE AUTENTICITATE

A

PROIECTULUI DE FINALIZARE A STUDIILOR

Titlul proiectului DEMO DE JOC PE CALCULATOR

Autorul proiectului Suciu Mirela

Proiectul de finalizare a studiilor este elaborat în vederea susținerii examenului de finalizare a studiilor organizat de către Facultatea _______________I.E.T.I._________________________ din cadrul Universității din Oradea, sesiunea________iulie_________ a anului universitar __2016___________.

Prin prezenta, subsemnatul (nume, prenume, CNP) Suciu Mirela 2920528350017, declar pe proprie răspundere că aceast proiect a fost scris de către mine, fără nici un ajutor neautorizat și că nici o parte a proiectului nu conține aplicații sau studii de caz publicate de alți autori.

Declar, de asemenea, că în proiect nu există idei, tabele, grafice, hărți sau alte surse folosite fără respectarea legii române și a convențiilor internaționale privind drepturile de autor.

Oradea,

Data Semnătura

Similar Posts