PROGRAMUL DE STUDIU CALCULATOARE FORMA DE ÎNVĂȚĂMÂNT IF Lucrare de licență COORDONATOR ȘTIINȚIFIC: Ș. L. DR. ING. FLORIN VANCEA ABSOLVENT: IUHAS… [306420]

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU CALCULATOARE

FORMA DE ÎNVĂȚĂMÂNT IF

Lucrare de licență

COORDONATOR ȘTIINȚIFIC:

Ș. L. DR. ING. FLORIN VANCEA

ABSOLVENT: [anonimizat]

2018

UNIVERSITATEA DIN ORADEA

FACULTATEA DE INGINERIE ELECTRICĂ ȘI TEHNOLOGIA INFORMAȚIEI

PROGRAMUL DE STUDIU CALCULATOARE

FORMA DE ÎNVĂȚĂMÂNT IF

2D PLATFORM GAME

„NINJA FIGHTER”

COORDONATOR ȘTIINȚIFIC:

Ș. L. DR. ING. FLORIN VANCEA

ABSOLVENT: [anonimizat]

2018

Introducere

i. Motivul alegerii temei de joc

Încă de la apariția primului joc până în prezent putem afirma că jocul este o [anonimizat]. [anonimizat] a oferi jucătorului o [anonimizat]-[anonimizat]. Unele jocuri oferă utilizatorului posibilitatea de a-[anonimizat] o experiență unică fiecărui jucător în parte. Jocurile acestea sunt mult mai complexe decât cele clasice și necesită o [anonimizat]. În ceea ce privește latura de programare a [anonimizat] a obține produsul final.

[anonimizat]-[anonimizat] o gândire foarte elaborată. [anonimizat], sociale. Posibilitățile de a crea lumi noi și unice sunt nelimitate și având în vedere avansarea exponențială a [anonimizat]. Așadar, un factor important prin care se diferențiază jocurile video este scopul pe care îl îndeplinesc: de a ajuta trecerea mai ușoară a timpului, [anonimizat] a oferi o [anonimizat] a avansa la fiecare joc câștigat cu puncte primite care au scopul de a te plasa pe o scară cu diferite ranguri în funcție de performanța ta.

[anonimizat] a scoate în evidență jucătorii cei mai buni și de a le da posibilitatea să fie găsiți de sponsori sau echipe și să poată fi recrutați. [anonimizat], întrucât jocurile au început să devină o alegere de carieră profesională pentru mulți tineri. [anonimizat], cu speranța că jocul creat de ei va ajunge printre cele mai jucate.

Un joc video bine realizat include aportul mai multor categorii de artiști. Pe de-o parte reprezintă partea strict vizuală a jocului, pe de altă parte este cea care ține de programarea jocului în sine: [anonimizat], [anonimizat], UI programmer etc.

În prezenta lucrare de licență am realizat un joc de tipul 2D platformer făcut cu Unity și programat în C#. 2D platformer se referă la jocurile în care utilizatorul controlează un personaj pentru a sări peste platforme cu diferite obstacole de care trebuie să treacă. Cel mai comun lucru la aceste tipuri de jocuri este săritura folosită la trecerea peste obstacole, dar putem întâlni tot felul de abilități atribuite personajelor sau inamicilor. Pentru partea vizuală a jocului am început prin a-mi colecta cât mai multe obiecte și imagini, iar pentru caracterele folosite am găsit un număr limitat de caractere și animațiile de: alergare, săritură, căzătură, atac, etc. Toate obiectele folosite le-am editat pentru a crea o atmosferă mai întunecată a jocului.

Mi-am ales aceasta temă, deoarece încă de la o vârsta fragedă am avut un interes crescut față de jocurile video. Fiind captivat doar de produsul final cu diferite lumi și numeroase personaje, nu știam procesul complet al creării unui joc video și contribuția fiecărui artist și programator. Realizând un joc video 2D în lucrarea mea de licență, am considerat că este lucrarea perfectă pentru mine, scopul meu fiind acela de a ajunge să lucrez în domeniu într-o bună zi.

Am ales sa fac jocul în Unity din mai multe motive. Unity este o platformă gratuită pentru crearea jocurilor 2D sau 3D, dar există și o variantă plătită care include mai multe componente cu o complexitate mai mare pentru implementarea caracteristicilor mai speciale găsite în jocurile mai avansate, însă și varianta gratuită dispune de o varietate mare de funcționalități. Motorul de joc Unity are o interfață vizuală plăcută și ușor de învățat. De asemenea, comunitatea de programatori care îl folosește este foarte vastă și există numeroase tutoriale și răspunsuri la întrebări pentru orice problemă întâmpinată. Cum multe jocuri renumite sunt făcute în Unity, asta ne arată că învățând să folosim pe cât de mult programul și cu o cunoaștere bună a programării, putem realiza un joc chiar distractiv pe care avem și posibilitatea de a-l vinde. Aici intervine un alt motiv major pentru care Unity este platforma ideală de a crea un joc: motivul este acela că la sfârșitul implementării lui avem posibilitatea de a-l face compatibil cu cele mai populare platforme existente: Android, IOS, Windows Phone, PlayStation 3, XBox 360, PlayStation Vita, etc.

Un alt motiv ar fi magazinul de obiecte din Unity unde avem posibilitatea de a găsi tot felul de obiecte necesare la crearea nivelelor și a jocului, majoritatea dintre ele trebuind cumpărate, dar existând și o varietate mai simplă de obiecte care sunt gratuite. Un ultim motiv pe care vreau să îl menționez este simplicitatea cu care putem pune elemente noi în scenele noastre, cărora la rândul lor le putem adăuga clase pentru a putea programa fiecare obiect în parte și fiecare componentă de pe un obiect cu toate setările și variabilele ei, având posibilitatea de a accesa și modifica din cod cu ușurință. Pentru a adăuga elemente noi în scenă trebuie doar să le tragem în ea și sunt adăugate imediat.

În Unity putem programa folosind limbajele de programare C#, Javascript și Boo. Am ales să folosesc C#, deoarece este un limbaj mai nou și cel mai folosit pentru a crea jocuri în Unity. Pe lângă asta, el se ocupă singur de alocarea și delocarea memoriei și totodată blochează scurgerile de memorie care fac ca jocul să consume mai multă memorie RAM pe măsură ce trece jocul. Problema aceasta este foarte întâlnită de programatori, chiar și de cei avansați, și o vedem în jocuri precum Mortal Kombat X pe platforma PC, care, după rularea jocului timp de 30 de minute, se va bloca din cauza folosirii memoriei RAM la capacitate de 100%.

Fiind cel mai folosit limbaj de programare la crearea jocurilor în Unity, C# oferă cea mai mare varietate de întrebări și răspunsuri care apar în ceea ce ține de implementare.

ii. Structura lucrării

În primul capitol, voi începe prin a prezenta istoria jocurilor de la început până în prezent. În al doilea capitol, voi analiza două jocuri 2D realizate cu motorul de joc Unity: Ori and the Blind Forest și Cuphead. Iar în al treilea capitol mă voi axa pe prezentarea jocului în sine, voi da exemple despre tehnologiile folosite și cum funcționează ele, iar la fiecare voi explica implementarea lor și cum lucrează împreună în unele cazuri pentru a recrea efectul dorit în jocul meu.

Capitolul I. Istoria jocurilor video

1.1 Scurtă întroducere

În epoca actuală, în care consolele de mare putere, display-urile 3D și jocurile cu grafică din ce în ce mai avansată domină piața jocurilor de calculator, puțini dintre consumatorii actuali de jocuri se mai întreabă cum a luat nastere acest curent. În ciuda faptului că piața globală a jocurilor video a fost estimată recent la aproximativ 70 miliarde USD, industria modernă de jocuri video a avut un început foarte umil.

1.2 Definiție

Termenul de joc video și semnificația acestuia a trecut prin trasformări treptate până în prezent. Un joc pe calculator înseamnă un joc care utilizează un monitor ca mijloc de feedback și un dispozitiv periferic de intrare, cum ar fi un joystick, o tastatură, un controller sau o combinație a acestora. Un joc pe consolă este acela care utilizează un sistem special proiectat cu acest scop, ce se conectează la un monitor sau televizor. Termenul de joc video are și alte semnificații. El se mai poate referi și la jocurile ce rulează pe telefoane mobile, tablete, ceasuri electronice, camere video, MP3 playere și lista poate continua. Jocuri pe calculator sunt denumite și jocurile în mod text sau jocuri care folosesc și alte metode care includ sunetul sau vibrația ca principalul mijloc de feedback, dar in momentul actual apar prea puține jocuri noi care intră în aceste categorii.Istoria jocului pe calculator poate fi considerată, în parte, o istorie a tehnologiei, și aceasta din simplul motiv că jocul pe calculator necesită o tehnologie capabilă să gestioneze cantități mari de date și să reprezinte aceste date. Din anumite puncte de vedere, se poate spune că tehnologia determină cultura, iar din altele, că cultura determină tehnologia. Totuși, o perspectivă mai echilibrată ar fi aceea conform căreia tehnologia și cultura s-au influențat reciproc. Pentru a ilustra acest lucru, jocul pe calculator a fost inițial dezvoltat pe echipamente concepute în scopuri militare și academice, însă în zilele noastre, jocul pe calculator este elementul principal în dezvoltarea multor componente hardware, cum ar fi acceleratoarele grafice 3D.Istoria jocurilor video datează încă din anii 1950, când academicienii în domeniul calculatoarelor au început să proiecteze jocuri și simulări simple ca parte a cercetării lor. Jocurile video nu au atins popularitate maximă până în anii 1970 și 1980, când au fost introduse publicului larg jocuri video arcade și console de jocuri care utilizează joystick-uri, butoane și alte controloare, precum și grafică pe ecrane de calculator și jocuri pe calculator folosite de acasă. Începând cu anii 1980, jocurile video au devenit o formă populară de divertisment și o parte a culturii populare moderne în majoritatea părților lumii. Unul dintre primele jocuri a fost Spacewar!, dezvoltat în mediul universitar. Cele mai timpurii jocuri video prezente în sălile de jocuri au fost dezvoltate între anii 1972 și 1978. În anii 1970 a apărut prima generație de console de acasă, inclusiv faimosul joc Pong și diverse „clone” ale acestuia.Anii 1970 au fost, de asemenea, epoca jocurilor de calculator de mare viteză și capacitate de stocare. Vârsta de aur a jocurilor video arcade a fost cuprinsă între anii 1978 – 1982. Sălile de jocuri video cu aparate mari, decorate grafic, funcționând pe bază de monede, au fost folosite în mall-uri, iar consolele de acasă populare și accesibile, cum ar fi Atari 2600 și Intellivision, au permis oamenilor să joace jocuri la televizoarele lor din confortul casei lor. În anii 1980, au apărut computerele special dedicate jocurilor (gaming computers), jocurile de noroc online și jocurile LCD portabile; în același timp, această eră a fost afectată de prăbușirea jocurilor video în 1983.

1.3 Înaintea apariției jocurilor: 1889-1970

Anii 1950 marchează primele începuturi ale industriei de gaming. Primele jocuri au fost create de Jon Snell, fiind dezvoltate pentru a rula pe computere EDSAC și osciloscoape. Totuși, au existat precursori care au contribuit cu invențiile lor la istoria jocurilor video încă dinainte de 1950.În 1889, în Japonia, un tânăr antreprenor de vreo 30 de ani pe numele de Fusajiro Yamauchi a pus bazele companiei Marufuku, producător de cărți de joc tradiționale japoneze. Doi ani mai târziu, compania își schimbă numele în Nintendo Koppai. Urmașul lui Fusajiro Yamauchi, Sekiryo Kaneda, preia conducerea companiei Nintendo, devenită deja cea mai mare companie producătoare de carți de joc din Japonia, iar după el, o va prelua Hiroshi Yamauchi, strănepotul fondatorului, căruia i se aduce creditul de a transforma Nintendo de la cel mai mare producător de cărți de joc la unul dintre cei mai mari producatori de jocuri de pe glob.În Olanda, în 1891, Gerard Philips pune bazele unei companii producătoare de lămpi incandescente și alte produse electrice, care va da pieței, în cele din urmă, consola CDi. Aceasta era o consolă realizată sub licențiere, compania avand în portofoliu și două jocuri marca Nintendo: anume Zelda și Mario. Succesul nu a fost cel scontat, din cauza prețului prea mare și a problemelor de interfață de utilizare. Totusi, produsul a dat noi idei industriei.În anul 1918, Konosuke Matsushita pune bazele Matsushita Electric Housewares Manufacturing Works. El este precursorul giganților Panasonic, Technics si Quasar. Contribuția pe care o are el în istoria jocurilor este celebra consolă 3DO.În 1945, într-un atelier de garaj, doi americani, Harold „Matt” Matson și Elliot Handler, lucrau de zor pentru a produce rame fotografice. Au combinat parte din numele fiecăruia pentru a pune bazele companiei Mattel. Ei sunt producatorii Barbie, Matchbox și ai multor alte jucării faimoase, dar și ai seriei de console Intellivision, prima consolă pe 10 biți lansată în 1979.În 1947, Thomas T. Goldsmith Jr. și Este Ray Mann au patentat un dispozitiv numit Cathode-Ray Tube Amusement Device. Acest dispozitiv folosea 8 tuburi vidate pentru a simula lansarea unei rachete catre o tinta si avea butoane pentru a controla curbura si viteza rachetei. Deoarece grafica computerizata nu putea fi desenata electronic la acea vreme, tintele erau desenate pe o macheta care se lipea de ecran.În 1953, un american, David Rosen, veteran al războiului dintre S.U.A. și Coreea, vede popularitatea jocurilor mecanice activate cu monede prezente pe teritoriul bazelor militare americane din Japonia, asa că pune bazele Service Games. În anii 1960, Rosen decide să producă propriile jocuri operate cu monezi, denumite mai târziu SEGA (forma prescurtată de la service Games.)

1.4 Începuturile jocurilor

Universitățile americane de asemenea, au reprezentat un mediu propice pentru invenția programelor distractive. A.S. Douglas de la Universitatea Cambridge, creează OXO, o versiune grafică a popularului X și Zero. Acesta a rulat pe un computer EDSAC și purta denumirea de Noughts and Crosses.Totusi, majoritatea oamenilor consideră că primul joc interactiv pentru calculator este Tennis for Two, dezvoltat în 1958 de către fizicianul nuclear William Higginbotham (care a ajutat să se construiască prima bombă atomică), pentru vizitatorii Laboratorului Național Brookhaven. Jocul său era menit să instruiască jucătorii despre efectele gravitației. Jocul era jucat cu două controllere în formă de cutie, ambele echipate cu un buton pentru traiectorie ș altul pentru lovirea mingii. Tennis for Two a fost arătat publicului timp de două sezoane înainte de dezmembrare în 1959.

Figura 1. Tennis for Two și echipamentul necesar pentru acesta.

În 1962, Steve Russel a creat jocul Spacewar!, un joc de simulare spațială, ce rula pe un nou computer al vremii, DEC PDP-1. Acesta este considerat de mulți specialiști primul joc pentru calculator. Jocul s-a răspândit rapid în universitățile și laboratoarele de cercetare din tară. Jocul poate fi rezumat astfel: există doi jucători și fiecare controlează o navă spațială care înconjoară o planetă. Jucătorii se pot împușca, își pot întoarce navele și pot accelera. Scopul este – firește – să lovești celălalt jucător înainte să fii tu lovit. Jocul a fost în cele din urmă distribuit împreună cu noile computere DEC si vândut prin primitivul Internet existent la acea vreme.

Figura 2. Spacewar!, primul joc pe computer (1962)

1.5 Epoca de aur a jocurilor Arcade

1.5.1 Prima generație de console (1972-1977)

În 1971, a apărut primul joc arcade, creat de Nolan Bushnell, denumit Computer Space. Acest joc funcționa cu monede și nu a fost foarte bine primit de publicul larg din taverne și baruri, deoarece avea un grad de dificultate ridicat și impunea citirea unor reguli stufoase înainte de a fi folosit, ceea ce a plictisit utilizatorii. Astfel, Busnell a fost nevoit să caute idei noi.

În 1968, Ralph Baer, care va fi cunoscut mai târziu și ca părintele jocurilor video, a patentat o versiune de consolă de jocuri video pe care a denumit-o Television Gaming and Training Apparatus. În 1967, Baer a creat un joc asemănător jocului de ping-pong pentru o consolă care era similară cu Tennis for Two (și cu viitorul joc arcade Pong) și mai târziu, în 1972, în colaborare cu Magnavox, a creat prima consolă pentru acest joc, consolă numită Magnavox Odyssey.

Aceasta a marcat începutul primei generații de console. Tot în această perioadă apar console care puteau fi folosite de acasă, cu posibilitatea de a fi conectate la televizor. La început, Pong a fost plasat în locuri de divertisment, pe piețe și târguri de distracții. Acesta a fost momentul care a declanșat explozia culturii sălilor de jocuri sau arcade, ce avea să dureze o lungă perioadă.

Figura 3. Aparatul de joc creat de Atari.

În primăvara lui 1972, Bushnell a fost prezent la o demonstrație a sistemului Magnavox Odyssey în California. La puțin timp după aceasta, el și Ted Dabney, prietenul său, au format o companie numită Atari, apoi au angajat un inginer electronist pe nume Al Alcorn ca designer principal. Inițial, Al trebuia să lucreze la un joc de curse, dar din cauza complexității, Nolan a decis ca Acorn să construiască un joc de ping-pong, o copie după jocul Tenis al consolei Odyssey. Succesul jocului PONG a făcut să apară sute de clone, printre care și Coleco Telstar.

1.5.2 A doua generație de console (1976-1992)

Din 1976 până în 1992, a apărut cea de-a doua generație de console video. Această generație a fost marcată de faptul că multe alte companii au urmat exemplul dat de Atari și au fost create noi jocuri interesante. Breakout a apărut în 1976, și, de asemenea, Space Wars, care pentru prima dată a folosit grafice vectoriale. În 1978 a fost introdusă culoarea și jocul Space Invaders a fost produs de Midway, în 1979 a apărut jocul Asteroizii (cu 50.000 de mașini vândute la nivel mondial, având astfel cel mai mare succes), iar în 1980 a fost creat jocul foarte popular Pac-Man. Un altjoc demn de luat în considerare a fost Death Race, care a apărut în 1976.

Space Invaders definește majoritatea parametrilor de bază a ceea ce se poate numi jocul de acțiune clasic: un jucător controlează un obiect sau un actor împotriva unor dușmani. Se păstrează un scor. De asemenea, jocul este în timp real și necesită reflexe rapide. Jucătorul are o sumă fixă de vieți (de obicei trei), iar jocul se bazează pe niveluri succesive de dificultate tot mai mare.

În 1977, Atari a lansat consola pe bază de casetă: Video Computer System (VCS), ulterior denumită Atari 2600. Nouă jocuri au fost lansate pentru sezonul sărbătorilor, și datorită acestora, ajunge să fie una dintre cele mai populare console a primelor generații. Inițial, Atari 2600 nu s-a vândut foarte bine, deoarece dispozitivul era scump și jocurile nu erau foarte bune, dar punctul de cotitură a venit în 1980, când Atari a început să combine jocul Space Invaders cu dispozitivul. Acest lucru arată că, în cele din urmă, nu hardware-ul este cel care contează, ci jocurile. În total au fost produse peste 1000 de cartușe de joc pentru VCS. Au fost vândute peste 30 de milioane de dispozitive și sute de milioane de jocuri.

La primele console, codul-sursă pentru jocuri se făcea cu ajutorul logicii discrete și era codat direct în microcipuri, așa că nu puteau fi rulate alte jocuri pe lângă cele care se rulau deja. În anii ’70 jocurile au început să fie distribuite și cu ajutorul casetelor. Programele erau stocate pe chip-uri ROM care erau montate în casete de plastic, acestea putând fi introduse în sloturile de pe console. Atunci când casetele erau introduse, microprocesoarele din console citeau din memoria casetei, apoi rulau programul stocat.

Figura 4. Consola de jocuri Atari 2600 (sau VCS) și jocul Space Invaders.

În 1979, compania Activision a fost creată de foști programatori de la Atari, nemulțumiți de politica firmei, devenind astfel prima companie dezvoltatoare de jocuri. În 1983 a avut loc o scădere bruscă a popularității jocurilor, cunoscută și sub numele de Video Game Crash of 1983. Această criză a fost provocată de suprasaturarea pieței din cauza calității foarte proaste a jocurilor oferite de terți.

1.5.3 A treia generație de console (1983-1989)

Cea de-a treia generație de console, care au fost unități pe 8 biți, au apărut din 1983 până în 1989. Această perioadă este marcată de Nintendo. În 1985 a apărut pe piața consola Nintendo Entertainment System, ce a adus pe piață o interfață excelentă pentru consumul de jocuri video de acasă. Sega, de asemenea a lansat propria lor consolă la puțin timp după Nintendo, dar nu s-a bucurat de aceeași popularitate. Tot în această perioadă au apărut pe piață jocuri extrem de populare care au rămas faimoase până în zilele noastre și personaje precum Mario. Jocul Mario Bros îsi face apariția pe piață tot în anul 1983, oferind joc cooperativ pentru doi jucatori și punând bazele următoarelor jocuri de tip platformer cooperativ. Această notorietate a brandului Nintendo a fost influențată de restricționarea suportului pentru terți, limitând numărul de jocuri pe care le puteau ei produce (numai 5 jocuri pe an), și crearea Sigiliului de Aprobare (Seal of Approval), pentru a ajuta jucătorii sa aleagă jocurile ce îndeplinesc standardul impus de Nintendo. Alte nume de console cunoscute pe piață în această perioadă au fost Sega Genesis și Turbo Grafx 16.

În 1989, Nintendo a lansat Game Boy, prima consolă portabilă, și au distribuit jocul de puzzle Tetris împreună cu sistemul. Aproape în același timp, au apărut alte console portabile, printre care Sega Game Gear și Atari Lynx, care deși mai performante, aveau o durată a bateriei redusă și mai puține jocuri decât Game Boy.

Între timp în Russia, Alex Pajitnov proiectează un joc simplu, dar care creează dependență, un joc de puzzle, denumit chiar Puzzle, ce putea fi jucat pe PC-uri. Jocul a fost inițial creat pe un Elektronika 60 în timpul activității sale pentru Academia Sovietică de Știință, împreuna cu Dmitry Pavlovsky, iar Vadim Gerasimov urmează să-l porteze pe IBM PC. Versiunea de IBM PC își face eventual drum către Budapesta, unde e portată catre diferite platforme și „descoperită” de o companie britanică de software, numită Andromeda. Între timp, fără a stabili drepturile de copyright, Spectrum HoloByte lansează versiunea de IBM PC în Marea Britanie în 1986, iar popularitatea jocului ajunge să fie monumentală, motiv pentru care Andromeda se luptă să obțină copyrightul pentru versiunea de IBM PC si orice alt computer și reușește acest lucru în 1987.

1.5.4 A patra generație de console (1989-1993)

A patra generație de console, care au fost modele pe 16 biți, a apărut în perioada 1987-1999. Anii 1990 au văzut revigorarea și declinul arcadelor, trecerea la jocuri video 3D, îmbunătățirea jocurilor handheld și jocurile pe calculator.

Piața nord americană a fost dominată de Sega Genesis imediat după debutul ei în 1989. Unitățile CD-ROM au apărut prima dată pentru această generație de console, iar apoi pentru Mega Drive în 1991. Grafica 3D a apărut pentru prima dată pe aceste console și era posibilă doar cu ajutorul unor procesoare adiționale aflate în casetele cu jocuri. Neo-Geo a fost cea mai scumpă consolă la lansarea ei în 1990. Un atu al ei a fost o redare foarte bună a sunetului și o grafică 2D de înaltă calitate, mult mai avansată decât a competitorilor, acest lucru datorându-se hardware-ului care era același ce se găsea în jocurile arcade ale firmei SNK.

În decursul acestui deceniu, jocurile pentru PC au devenit mature. PC-ul se impune în fața consolelor, pentru că rezoluția lui grafică devine mai bună, are mai multă memorie, are hard discuri pentru stocarea datelor de jocuri și aveau o viteză mult mai mare a procesorului. Multe jocuri populare au fost produse pentru PC-uri în această perioadă, cum ar fi, de exemplu Lemmings, Sim City (de către celebrul Will Wright), Civilization (de Sid Meier), Popoulos (Peter Molyneux), Tomb Raider, Quake, Half-life și Grand Theft Auto. În același timp, computerele puteau transmite video și muzică de pe CD. Acest lucru a condus la o nouă generație de jocuri care se bazau pe buna integrare a Full Motion Video (FMV) și a pieselor de sunet excelente și a efectelor de sunet asupra mediului. Un exemplu important a fost Myst (1993), cu frumoase scene pre-redate și efecte sonore atmosferice. Un alt exemplu este Command & Conquer (1995), care a folosit FMV pentru a spune povestea.

Figura 5. Myst, Command & Conquer și Monkey Island

1.5.5 A cincea generație de console (1993-2006)

Cea de-a cincea generație de console, cu unități de 32 și 64 de biți, s-a întins pe perioada cuprinsă între anii 1993-2006. În această perioadă, au apărut și jocurile pe telefoanele mobile.

Încă din anii 1994-1995, Sega a lansat Sega Saturn, iar Sony, de asemenea, a debutat pe scena jocurilor video cu PlayStation. Ambele console foloseau tehnologie pe 32 de biti; aceste invenții au dat startul pentru dezvoltarea jocurilor 3D. În 1996, Nintendo a lansat consola pe 64 de biti, Nintendo 64, având vânzări de mai mult de 1,5 milioane de unități în doar trei luni. Tot în aceeași perioadă, jocul Super Mario 64 a devenit definitoriu pentru jocurile 3D de platformă.

Cele mai memorabile jocuri din această perioadă au fost Super Mario 64, PaRappa the Rapper, Dance Dance Revolution, Beatmania, Golden Eye 007, Legends of Zelda: Ocarina of Time și lista ar putea continua.

Figura 6. Unele jocuri începute pe noile console. De la stânga la dreapta: Ridge Racer pentru PlayStation, Virtual Fighter pentru Saturn și Super Mario 64 pentru N64, toate cu grafică 3D.

Alte jocuri memorabile ale erei includ: GoldenEye 007 (1997) de pe Nintendo 64 care a fost aclamat de critici pentru inovațiile aduse și pentru că a fost primul First Person Shooter (FPS) de succes pentru o consolă. Unul dintre jocurile populare de pe PlayStation a fost Metal Gear Solid (1998) care a pus bazele jocurilor de tip stealth. Până la sfârșitul anilor 90, Sony a devenit un competitor de temut pe piața jocurilor video.

1.5.6 A șasea generație de console (2000-2013)

În anii 2000, a apărut cea de-a șasea generație de console. În această perioadă, jocurile online și jocurile mobile au devenit aspecte majore ale culturii jocurilor.

Această perioadă este uneori denumită „era de 128 biți”, și este caracterizată de jocuri pe calculator și video, console de jocuri video și dispozitive portabile pentru jocuri video. Platformele celei de-a șasea generații includ Sega Dreamcast, Sony PlayStation 2, Nintendo GameCube și Microsoft Xbox. Această eră a început pe 27 noiembrie 1998 cu lansarea japoneză a jocului Dreamcast, căruia i s-a alăturat de PlayStation 2 în martie 2000 și GameCube și Xbox în 2001.

Această generație de console s-a remarcat prin controversele majore provocate de conținutul mare de sex, crimă, violență, consum de droguri, propagandă socială, cât și subiecte divergente de genul religiei, politicii, feminismului și economiei care se puteau regăsi în jocuri.

O altă evoluție importantă în această perioadă a fost apariția jocurilor MMORPG. Dintre acestea, World of Warcraft (2004) este cel mai faimos, deși nu este cel mai larg răspândit. Acest merit revine jocului Lineage II, care are o mare amploare în special în Coreea de Sud. Însă și WoW are o mare amploare cu cele zece milioane de jucători ai săi care petrec multe ore pe zi în lumea lui Azeroth și împreună plătesc mai mult de un miliard de dolari pe an pentru aceasta.

Figura 7. Două bestseller-uri folosite pentru PC: The Sims și World of Warcraft.

1.5.7 A șaptea generație de console (2005-prezent)

Această eră a fost marcată de bugete uriașe cheltuite pentru dezvoltarea de jocuri, unele având grafică cinematografică.

Se remarcă în primul rând consolele lansate de la sfârșitul anului 2005 de către Nintendo, Microsoft și Sony Computer Entertainment. Pentru consolele de acasă, a șaptea generație a început pe data de 22 noiembrie 2005 cu lansarea lui Xbox 360 de către Microsoft și a continuat cu lansarea PlayStation 3 de către Sony Computer Entertainment pe 17 noiembrie 2006 și Nintendo Wii pe 19 noiembrie 2006. Noi tipuri de descoperiri tehnologice au apărut cu fiecare nouă consolă. Xbox 360 a oferit jocuri redate în mod natural la rezoluții de înaltă definiție video (HD), PlayStation 3 a oferit redarea filmelor HD prin intermediul unui player 3D Blu-ray încorporat, iar Wii s-a concentrat asupra integrării controlorilor cu senzori de mișcare și joystick-urilor.

Jocurile produse pentru Wii au fost, de asemenea, destul de diverse, exploatând noile posibilități și introducând multe mini-jocuri. Wii Sports s-a remarcat sa fiind un joc minunat de jucat, urmat de Wii Play, din care au fost vândute peste 25 de milioane de exemplare. Jocurile produse de Nintendo s-au vândut foarte bine, probabil pentru că știau cel mai bine cum să utilizeze în mod eficient noile posibilități de interfață și cunoșteau publicul pe care îl aveau în vizor. Acest lucru este dovedit prin faptul că peste 500 de milioane de jocuri Wii au fost vândute la nivel mondial la sfârșitul anului 2009.

Nintendo a continuat să se investească în jocurile recreative și cele axate pe interacțiunea fizică, lansând Wii Fit, la pachet cu un balance board care măsoară distribuția greutății jucătorilor. Prin acest joc, Nintendo a introdus o nouă modalitate de a controla jocurile, explorând exercițiul fizic și sănătatea, lucruri care devenite deja un trend al lumii moderne. Jocul a fost un mare succes, cu vânzări de aproape 25 de milioane de exemplare.

Figura 8. Nintendo Wii și jocul Wii Fit.

1.5.8 A opta generație (2012-prezent)

A opta generație include console lansate începând cu 2012 de către Nintendo, Microsoft și Sony Computer Entertainment. A opta generație a consolelor de casă a început pe data de 18 noiembrie 2012 cu lansarea Wii U și a continuat cu lansarea PlayStation 4 pe 15 noiembrie 2013 și Xbox One pe 22 noiembrie 2013. Aceste console de jocuri video sunt urmașele celei de-a șaptea generație de console: PlayStation 3 Sony, Nintendo Wii și Xbox 360 de la Microsoft. A opta generație a dispozitivelor portabile atașate jocurilor video a început în Japonia, în februarie 2011, odată cu lansarea Nintendo 3DS, succesor al Nintendo DS, urmat de lansarea versiunilor nord-americane și europeane ale acestuia în luna martie a aceluiași an. Nintendo a lansat noul Nintendo 3DS XL în America de Nord pe 13 februarie 2015. Succesorul PlayStation Portable, PlayStation Vita, a fost lansat în Japonia în decembrie 2011, iar pe piețele occidentale, în februarie 2012.

Astăzi, întrecerea în domeniul jocurilor video are loc între noul PlayStation 4 lansat de Sony și Microsoft XBOX One, actualii lideri de piață.

În concluzie, jocurile de PC-uri sau console continuă să dețină o cotă de piață mare în Asia și Europa și să crească datorită distribuției digitale. Pe lângă aceasta, ca urmare a dezvoltării și utilizării pe scară largă de către consumatori a smart phone-urilor, jocurile pe telefonul mobil au reprezentat un factor esențial în dezvoltarea jocurilor, deoarece ele pot ajunge la persoane care înainte nu erau interesate de jocuri și la aceia care nu-și pot permite un hardware avansat, cum ar fi consolele pentru jocuri video.

Capitolul II. Ori and the Blind Forest și Cuphead. O analiză comparativă

În al doilea capitol am ales să compar două jocuri create prin motorul de joc Unity, ilustrând astfel două din sursele de inspirație pe care le-am folosit pentru jocul creat de mine. Dintre numeroasele jocuri care au fost realizate până acum în Unity, dintre care se pot menționa ca exemple Angry Birds Epic și Angry Birds 2, PewDiePie: Legend of the Brofist, Pokémon Go, Escape from Tarkov, Hearthstone: Heroes of Warcraft, am ales să compar jocul Ori and the Blind Forest și jocul Cuphead.

Mai întâi, să definim motorul de joc Unity, pentru a înțelege mai bine felul în care au fost create aceste două jocuri. Unity este un motor de joc de tip multiplatformă (termen provenit din engleză de la cross-platform, folosit în industria IT ca atribut al unui program sau aplicație, însemnând că programul respectiv este produs în mai multe variante, fiecare putând fi utilizată în mod specific pe o platformă hardware sau pe un anume sistem de operare. Unity a fost dezvoltat de Unity Technologies și a fost lansat în iunie 2005 la Conferința Worldwide Developers inițiată de compania Apple, ca motor de joc OS X-exclusive. Motorul are capacitatea de a crea atât jocuri tridimensionale, cât și bidimensionale, precum și simulări pentru computere, console și dispozitive mobile. De la lansarea sa au fost create mai multe versiuni majore ale Unity, cea mai recentă versiune fiind Unity 2018.1, lansată pe 2 mai 2018.

Pornind de la această definiție, vom începe analiza comparativă a jocurilor Ori and the Blind Forest și Cuphead.

2.1 Creatorii jocurilor

Ori and the Blind Forest este un joc video de aventură Metroidvania, dezvoltat de către Moon Studios și publicat de Microsoft Studios. Cuphead, în schimb, este un joc video indie de tip run and gun, dezvoltat și publicat de StudioMDHR. Ambele jocuri au fost lansate pentru Microsoft Windows și Xbox One, dar Ori and the Blind Forest a fost lansat cu aproximativ doi ani mai devreme, în martie 2015, pe când Cuphead a fost lansat în septembrie 2017.

2.2 Surse de inspirație. Obiective. Numărul de jucători

În jocul Ori and the Blind Forest, un jucător își asumă controlul asupra lui Ori, un spirit păzitor alb, și al lui Sein, „lumina și ochii” copacului pădurii. Pentru a avansa în joc, jucătorul are sarcina de a se deplasa între platforme și de a rezolva puzzle-uri. Jocul se bazează pe un sistem de „link-uri sufletești”, care permite jucătorului să salveze după voie, și pe un sistem de upgrade, care oferă jucătorului capacitatea de a întări abilitățile lui Ori. Povestea jocului a fost inspirată de The Lion King și The Iron Giant, în timp ce câteva din elementele jocului au fost inspirate de francizele Rayman și Metroid.

În comparație cu Ori and the Blind Forest, în jocul Cuphead există două personaje principale: Cuphead and Mugman. Jocul poate fi jucat de doi jucători, iar scopul este acela de a învinge o serie de răufăcători, pentru a rambursa, în cele din urmă, o datorie diavolului. Acest al doilea joc a fost inspirat de stilul de animație rubber hose folosit în desenele animate ai anilor 1930, cum ar fi cele create de studiourile Fleischer și Walt Disney Animation.

2.3 Cum se joacă Ori and the Blind Forest

Ori and the Blind Forest este un joc de platformă 2D, în care jucătorul îl controlează pe Ori și pe Sein. Aceștia au capacitatea de a sări și de a urca și multe alte abilități. Sein poate ținti cu flăcările sale (Spirit Flames) pentru a combate inamicii sau obstacolele care le apar în cale. În același timp, Ori este obligat să interacționeze cu mediul, pe măsură ce el și Sein sar de la o platformă la alta și rezolvă puzzle-uri. Ori se confruntă cu dușmani pe tot parcursul drumului lor spre restaurarea pădurii. Jucătorul îi ajută pe Ori să colecteze fragmente de sănătate, fragmente de energie, abilități noi și upgrade-uri. Lumea jocului se desfășoară pe măsură ce jucătorul câștigă noi abilități care îi permit să acceseze zonele inaccesibile anterior.

Pe lângă salvarea punctelor împrăștiate în joc, jucătorul poate crea „legături sufletești” oricând alege. Cu toate acestea, legăturile sufletești pot fi create doar cu ajutorul celulelor de energie colectate în timpul jocului; energia necesară nu se poate găsi oriunde și oricând, forțându-l astfel pe jucător să creeze aceste legături doar atunci când este necesar. Jucătorul poate obține puncte de abilitate pentru a cumpăra diferite avantaje și upgrade-uri, cum ar fi creșterea forței de distrugere a flăcărilor spiritului. Aceste upgrade-uri pot fi cumpărate oriunde a fost creată o legătură sufletească și doar în cazul în care jucătorul are suficiente puncte de abilitate pentru a-și cumpăra abilitățile pe care le dorește. Un punct de abilitate este creat atunci când Ori colectează suficientă experiență prin uciderea dușmanilor și distrugerea diverselor plante găsite pe întreg teritoriul. Fiecare abilitate trebuie să fie cumpărată în ordine succesivă de la unul din trei arbori de capacitate pentru a permite accesul la următoarea abilitate mai scumpă.

2.4 Cum se joacă Cuphead

Din punct de vedere al felului în care se joacă, Cuphead este asemănător cu Ori and the Blind Forest prin faptul că în ambele jocuri, jucătorul trebuie să lupte împotriva unor dușmani și are de recuperat sau de colectat puncte sau abilități cu care pot cumpăra puteri speciale sau mărite pentru a putea trece la un nivel mai avansat. Diferența dintre cele două jocuri este că în Ori, celulele de energie sunt rare și greu de obținut, pe când în Cuphead, jucătorul are vieți nelimitate. O altă diferență între cele două jocuri e că Ori and the Blind Forest poate fi jucat de un singur jucător, pe când Cuphead poate fi jucat de câte doi jucători deodată.

Jocul Cuphead se bazează pe continue lupte cu „șefi” și e construit pe nivele de tip „aleargă și împușcă” (run and gun). Jocul include, de asemenea, diferite roluri de jucat. Cuphead are vieți infinite, menținând tot echipamentul între decese. Jucătorul poate cumpăra arme și „farmece” (abilități speciale) din magazin, folosind monede colectate de la nivelele traversate. Caracterele jucătorului dispun de o lovitură de parare care poate fi folosită pentru anumite obiecte marcate în roz, cu diverse efecte; cea mai importantă fiind creșterea unui „supermetru”, care permite atacuri mai puternice. După terminarea unui nivel, jucătorul va fi clasat la un anumit nivel, determinat de performanța sa, calculată prin factori precum timpul necesar pentru a învinge un șef, daunele suferite/evitate și numărul de atacuri parate. Jocul are de asemenea și locuri secrete de descoperit.

2.5 Povestea din spatele jocului Ori and the Blind Forest

Glasul copacului spiritual din pădurea lui Nibel poveștește cum Ori, un spirit păzitor alb, a căzut din copac în timpul unei furtuni pe când era doar un nou-născut, fiind apoi adoptat de o creatură numită Naru, care l-a crescut pe Ori ca pe al lui. Un eveniment cataclismic face curând ca toată pădurea să se ofilească, iar Naru moare de foame. Rămas orfan, Ori e nevoit să exploreze pădurea pe cont propriu, până când se prăbușește lângă Copacul Spiritual; totuși, Ori nu moare, ci este readus la viață tocmai de Copacul Spiritual lângă care căzuse. Mai târziu, Ori se întâlnește cu Sein, o ființă în forma unei mici sfere albastre, care îl călăuzește pe Ori în aventura lor și atacă inamicii care le ies în cale. Pentru a restaura pădurea, Sein îl ghidează pe Ori spre recuperarea luminii a trei elemente principale care susțin balanta lui Nibel: Ape, Vanturi și Căldură.

Ori și Sein întâlnesc două ființe în căutarea lor. Una dintre ele este Gumo, ultimul supraviețuitor al clanului de ființe-păianjen Gumon, a cărui casă apără elementul Vânt, iar a doua dintre ele este Kuro, o bufniță uriașă și întunecoasă, care este ostilă față de Ori. Ostilitatea ființei Kuro și cataclismul pădurii sunt explicate în flashback-uri. Când Ori s-a pierdut, Copacul Spiritual a eliberat un fulger de lumină pentru a-l căuta, ceea ce a ucis toți puii lui Kuro, proaspăt ieșiți din găoace. Hotărâtă să împiedice ca același lucru să se întâmple cu copilul ei încă nenăscut, Kuro a luat nucleul de deasupra Copacului Spiritual, care era, de fapt, Sein. Fără sprijinul copacului spiritual, cele trei elemente nu puteau fi susținute, iar Nibel și-a pierdut echilibrul. Atunci când elementul Vântului este reaprins, Gumo, realizând ce intenționează să facă Ori și Sein, își folosește comoara clanului care stochează și ascunde lumina de Copacul Spiritual, pentru a o putea readuce la viață pe Naru și o duce apoi la Ori.

După ce elementul final, Căldura, este restaurat în vulcanul Muntele Horu, Kuro îi ia prizonieri pe Ori și Sein, în timp ce focul din vulcanul Horu începe să se răspândească. Naru, care fusese separat de Gumo, ajunge la timp ca să-l protejeze pe Ori de Kuro. Kuro cedează, amintindu-și durerea pe care a suferit-o ea când și-a pierdut proprii pui. Pe măsură ce focul se răspândește și urmează să ajungă la ultimul ei ou, Kuro îl duce pe Sein înapoi la Copacul Spiritual, care emite o lumină strălucitoare ce risipește focul și restaurează pădurea. Totuși, Kuro este distrus complet de lumină. Cu timpul, pădurea începe să înflorească încă o dată și Ori apare așezat pe un buștean, urmărind spiritele noi care se nasc pe câmp la poalele Copacului Spiritual. Gumo și Naru privesc împreună de departe, înainte ca aceasta din urmă să se întoarcă acasă, unde se odihnește ultimul ou al lui Kuro. Naru ajunge exact la timp pentru a vedea cum oul începe să eclozeze.

2.6 Povestea din spatele jocului Cuphead

Pe insulele fictive Inkwell, Cuphead și fratele său, Mugman, sunt doi copii iubitori de distracție, care trăiesc sub ochii protectori ai lui Elder Kettle. Fără să asculte de avertismentelor bătrânului, frații intră în Cazinoul Diavolului și încep să joace barbut. După un șir de reușite, Diavolul însuși se oferă să ridice miza. Miza era aceasta: dacă Cuphead și Mugman pot câștiga încă o lovitură, ei vor primi toți banii din cazinou; dacă nu, diavolul le va lua sufletele. Cuphead pierde, nimerind numărul unu la fiecare din zaruri, iar el și Mugman ajung să cerșească milă. Diavolul face o înțelegere cu ei: să colecteze „contractele sufletești” care semnifică proprietatea sa asupra sufletelor debitorilor săi evadați până la miezul nopții a doua zi, iar el ar putea să-i lase să-și păstreze propriul suflet. Ei îl vizitează pe Elder Kettle, care le dă o poțiune care le permite să arunce foc de la degete pentru a-i ajuta în căutarea lor, dar, de asemenea, îi avertizează că debitorii se pot transforma în diferite lucruri în încercarea de a-i opri.

Cei doi frați călătoresc în jurul Insulelor Inkwell, luptând cu locuitorii care își vânduseră sufletul diavolului, pentru a le obține contractele. Când intră pe a doua insulă, Elder Kettle le spune dinainte să „facă ceea ce trebuie” când se vor întâlni din nou cu diavolul. După ce recuperează contractele, cei doi se întorc la Cazinoul diavolului, însă managerul său, Regele Zar, le blochează calea. El pierduse un pariu cu diavolul, probabil unul prin care punea la îndoială că Cuphead și Mugman ar fi capabili să-și îndeplinească sarcina și îi forțează pe aceștia să lupte împotriva propriilor lui acoliți înainte de a-i confrunta el însuși. După ce frații îl înving pe Regele Zar, diavolul le impune să predea contractele în schimbul „alăturării la echipa sa”. Ce se întâmplă în continuare depinde de alegerea jucătorului. Dacă jucătorul decide să facă acest lucru, diavolul îi transformă pe Cuphead și pe Mugman în slugile sale demonice și jocul se termină. Dacă jucătorul refuză, diavolul devine furios din cauza refuzului fraților de a-și onora înțelegerea și se luptă el însuși cu ei. Cuphead și Mugman triumfă asupra lui, ard contractele și aleargă acasă. Aflând că nu mai au de ce să se teamă de diavol, foștii debitori îi onorează pe frați pentru acțiunile lor eroice.

Ambele povești ilustrează lupta binelui cu a răului și în ambele cazuri, binele triumfă. În ambele jocuri, jucătorul este pus să decidă, însă în jocul Cuphead, alegerea jucătorului determină radical felul în care se sfârșește jocul. Atât în Ori and the Blind Forest, cât și în Cuphead, jucătorii au alături de ei alte personaje care le vin în ajutor, le oferă sfaturi sau îi scapă din pericole. Ideea generală a ambelor jocuri este una inspirată și motivantă, dând sentimentul celui care joacă aceste jocuri că alegerile lui determină felul în care se pot desfășura lucrurile în joc și că binele trebuie să învingă, în cele din urmă.

2.7 Cum au fost create jocurile

2.7.1 Ori and the Blind Forest

Ori and the Blind Forest a fost dezvoltat de Moon Studios, o colaborare la nivel mondial de designeri și programatori care au lucrat la joc patru ani înainte de a-l lansa. Microsoft a achiziționat jocul la aproximativ un an după începerea dezvoltării acestuia.

Într un interviu acordat în legătură cu dezvoltarea jocului Ori and the Blind Forest, Gennadiy Korol de la Moon Studios răspunde la întrebarea următoare: „De ce ați ales Unity pentru a construi Ori and the Blind Forest?”:

„Am început dezvoltarea jocului Ori la începutul anului 2011. Pe atunci, prototipul cel mai timpuriu al lui Ori a fost, de fapt, dezvoltat în Construct, cu doar doi oameni care lucrau la el. Dar când a devenit clar faptul că vrem să lucrăm la un nivel mai mare și să transformăm Ori într-un joc complet dezvoltat, Unity a fost alegerea naturală pentru echipa noastră. Am reușit să portăm prototipul Construct în doar o săptămână și Ori s-a simțit imediat acasă acolo. Unity era puternic, extensibil, foarte intuitiv și prietenos cu artiștii, fiind în același timp accesibil pentru mica noastră echipă începătoare în acele zile. Am vrut să fim agili și indie, iar Unity a fost motorul de joc potrivit.”

O altă întrebare la același interviu a fost: „La care domeniu a contribuit cel mai mult motorul Unity?” Același Gennadiy Korol a răspuns:

„Pentru noi, partea cea mai importantă a motorului Unity a fost cât de flexibil și extensibil putea fi editorul său. În principiu, am reușit să transformăm Unity în motorul prefect de producție al jocului Ori.

Pentru echipa noastră tehnică, Ori este un titlu foarte provocator. De-a lungul timpului, Ori a devenit un titlu de „pictură care prinde viață” de tip full HD 2.5D cu gigabytes de artă artizanală, pictată și animată, cu niveluri nebune de parallaxare, care necesitau funcționarea la o viteză permanentă și consistentă de 60fps, fără ecrane de încărcare. În plus, a trebuit să oferim scene cinematografice sofisticate, cu tranziții crossfade între scene, medii interactive luxuriante, apă simulată de GPU, blur de mișcare și multe altele.

Din moment ce Ori este un joc în stil „Metroidvania”, a trebuit să permitem designerilor noștri să construiască nivelele și lumea Ori în cele mai eficiente și mai flexibile moduri. Designerii aveau nevoie sa aibă imaginea de ansamblu a tuturor scenelor din joc și capacitatea de a rearanja și reutiliza cu ușurință nivelurile de joc ca pe niște elemente LEGO pe o mare hartă a lumii.

Artiștii noștri aveau nevoie să aibă o linie de artă 2D care să le permită să construiască, să previzioneze și să animeze eficient toate arta noastră direct în editor. A trebuit să ascundem toată complexitatea miilor de permutări protectoare, precum și să facem ample optimizări de timp și de editare, pentru ca jocul să funcționeze eficient pe consolele țintă.

Ne-am dezvoltat propriul cadru cinematic și de animație, care ne-a permis să construim secvențe de poveste și filmulețe chiar în motor, iterând în editor cum s-ar face, de exemplu, cu un instrument de editare precum After Effects, dar care se integrează strâns cu toate celelalte cadre de bază ale noastre.

Din moment ce lumea lui Ori este constant continuuă, a trebuit să dezvoltăm propria soluție de editare de scene multiple, permițând artiștilor și designerilor să încarce și să editeze mai multe scene simultan (care mai târziu a devenit și baza instrumentelor noastre cinematice, în care fiecare cadru de film este o scenă separată), verificând problemele artistice în timpul tranzițiilor scenelor sau al editării cinematice mai fine.

Ceea ce a fost uimitor a fost că am reușit să implementăm în 2012 lucruri inimaginabile, cum a fost propria noastră soluție de editare de scene multiple. Și înainte ca Unity să suporte formatul de text, aproape că am ajuns să punem în aplicare propriul format de text pentru elemente și scene. E pur și simplu nebunesc, dar asta arată cât de puternică și extensibil este Unity.”

2.7.2 Cuphead

Cuphead a fost primul joc al studioului StudioMDHR, un studio canadian de dezvoltare jocuri indio indie, format din frații Chad și Jared Moldenhauer. O contribuție suplimentară la animație a adus-o Jake Clark, iar programarea a fost condusă de Eric Billingsley. Dezvoltarea jocului a început în 2010 folosind motorul de joc Unity și a fost dezvoltat din casele fraților din Oakville, Ontario și Regina, Saskatchewan. Jocul a fost inspirat de desene animate produse de studiourile de animație Fleischer și Walt Disney, împreună cu cartoonistii Ub Iwerks, Grim Natwick și Willard Bowsky.

Chad Moldenhauer, care lucrase anterior în designul grafic, a desenat de mână animațiile și le-a pictat fundalul folosind acuarele, colorându-le apoi în Photoshop. Jocul rulează la o viteză de 60, în timp ce animația rulează la 24, ceea ce reprezintă un standard de film. Jared Moldenhauer a lucrat la alte aspecte ale jocului, deși cei doi frați au discutat unul cu altul despre designul jocului. Studioul lor a angajat un dezvoltator român, un animator din Brooklyn, și un muzician de jazz din Ontario pentru proiect.

Moldenhauer explica într-un interviu postat pe site-ul Digital Trends:

„Un singur cadru de animație necesită probabil aproape douăzeci de minute pentru a fi conceput, legat, imprimat, colorat și pus în joc. Este cu siguranță un proces mai lung decât animația digitală, pentru că nu există posibilitatea imediată de a anula ceea ce ai făcut deja. Dacă ceva nu iese bine, se aruncă la gunoi. Înmulțiți douăzeci de minute pe cadru cu aproape 50.000 de cadre – mult mai mult decât cele 14-15.000 de cadre pe care echipa le-a estimat atunci când a început să lucreze la întregul jocul – și asta înseamnă aproape doi ani de ore de muncă doar în domeniul animației personajelor. Adăugați în joc trei ore de muzică originală (înregistrată de un ansamblu ragtime de 10 instrumente, o trupă mare, un cvartet și un dansator de step), fundaluri de acuarelă pictate manual și fonturi desenate manual, să nu mai vorbim de proiectarea și dezvoltarea reală a jocului și veți începe să obțineți o imagine a motivului pentru care drumul a fost atât de lung.”

S-a dovedit în final că munca fraților Moldenhauer și a echipei lor s-a meritat, pentru că în primele două săptămâni de lansare, Cuphead a vândut peste un milion de exemplare în întreaga lume. Până în decembrie 2017, acest număr a crescut la două milioane.

În comparație cu Cuphead, Ori and the Blind Forest a devenit și el profitabil pentru Microsoft într-o săptămână de la lansarea jocului pe Xbox One și PC. Gennadi Korol, co-fondator al Moon Studios, a declarat că jocul a fost profitabil pentru studioul însuși în câteva săptămâni.

Capitolul III. Descrierea componentelor folosite și implementarea jocului

3.1 Universul jocului

Caracterul nostru se află într-un univers 2D plin de capcane și inamici la tot pasul. Scopul jocului este acela de a ajunge la finalul nivelului și de a muri pe cât de puțin posibil. Odată ce personajul principal moare, acesta va fi teleportat înapoi la începutul nivelului, însă întregul progres realizat de el până în acel moment va fi salvat, iar el va putea continua același nivel, dar cu mai puține dificultăți de fiecare dată. Îndată ce el ajunge la final, pe ecran va fi afișat un mesaj care indică sfârșitul jocului, împreună cu monedele colectate și numărul de încercări necesare pentru a termina nivelul și opțiunea de a juca din nou sau de a ieși din joc.

Figura 9. Zona de pornire a jocului 2D platform Ninja Fighter.

3.2 Scene

Scenele conțin toate obiectele folosite în joc. Ele sunt folosite pentru a crea meniuri, fiecare nivel în parte etc. Pentru crearea mai multor niveluri este indicat ca fiecare nivel să aibă o scenă proprie și la terminarea unui nivel să se execute încărcarea alteia.

Jocul conține trei scene, prima reprezentând meniul principal al jocului care apare la pornirea lui și care conține trei butoane. Butonul Play face să se încarce a doua scena și anume jocul principal. Butonul Settings ne duce la un alt meniu de setări unde avem posibilitatea de a modifica volumul din joc, iar butonul Quit ne dă posibilitatea să ieșim din joc.

A doua scena reprezintă jocul în sine cu toate personajele, obiectele, animațiile și codul necesar aplicat pe fiecare, iar a treia scena este scena de final de joc care se încarcă atunci când jocul este finalizat, iar aceasta conține doua butoane: Play again și Quit.

3.3 Camera

La crearea fiecărei scene noi, se generează automat o cameră principală. Scopul ei este de a captura și afișa pe ecran lumea din joc odată cu pornirea lui. Acestea pot fi statice sau dinamice. Cele statice au mai multe întrebuințări. Un bun exemplu sunt jocurile de tip puzzle unde nu este necesară mișcarea lor. Pentru acest joc le-am folosit doar la meniuri. În jocul actual am folosit o cameră dinamică pe care am atașat mai multe componente, o clasă folosită pentru a controla direcția de deplasare a camerei în funcție de coordonatele X și Y de pe axa XOY a caracterului și, folosind Mathf.SmoothDamp, am creat un efect mai liniștitor care nu bruschează mișcarea camerei.

Figura 10. Funcția folosită atașată camerei din joc.

Am folosit, de asemenea, o sursă audio pe care am adăugat sunetul care va fi redat în joc, un mixer audio legat la controlul de volum din setări setat pe sursa audio și un ascultător audio care recepționează semnalele audio și astfel ele pot fi redate.

Cu ajutorul camerei principale cu proeminența setată pe perspectivă, am putut crea efectul mult folosit în jocurile 2D în ultimii cincisprezece ani și anume efectul parallax. Deși este aplicat pe un joc 2D, dacă efectul parallax este făcut corect, acesta creează iluzia optică de adâncime atunci când unele obiecte precum imaginea de fundal, cea din prim plan sau copaci, nori etc. sunt poziționate fie mai în spate, fie mai în față. Prin modificarea coordonatei Z din axa XYZ se poate reda acest efect. Un bun exemplu este comparația dintre caracter cu Z = 0 și imaginea de fundal cu Z = 50. Imaginea de fundal va apărea mult mai în spate decât caracterul și odată cu mișcarea camerei vom observa că imaginea din fundal se mișcă la o viteza considerabil mai mică decât caracterul. Desigur, pot exista nenumărate obiecte și imagini, fiecare la adâncime diferită una față de cealaltă, prin urmare efectul de parallax fiind creat cu scopul de a face jucătorul să fie mai cuprins de lumea virtuală în care se află.

3.4 Colliders și Platform effectors

Collider-ele sunt componente de mai multe tipuri, în funcție de forma pe care vrem să o obținem (pătrat, cerc, capsulă, poligon, etc), ele fiind zonele de coliziune aplicate unui obiect astfel încât să facă trecerea obiectelor prin ele imposibilă. Acestea mai au opțiunea de a fi setate pe isTrigger și vor acționa ca un declanșator la trecerea prin ele; în acest mod, pot fi utilizate în cod pentru a performa o acțiune anume.

Platform effector este o altă componentă din Unity care poate fi aplicată unui obiect și ambele împreună dau efectul de a putea trece prin obiecte din anumite unghiuri chiar dacă au collidere. În cazul meu am folosit un unghi de suprafață de 112 grade. Acest efect este recreat în multe jocuri 2D. De exemplu dacă avem o platformă și caracterul nostru se află sub ea, platform effector-ul va face posibilă sărirea prin ea și va deveni solidă doar atunci când caracterul se află deasupra ei. Am creat și o clasă care are scopul de a ignora un anumit collider și aceasta poate fi aplicată pe orice obiect, ea dispune doar de o singură variabilă pe care am serializat-o, lucru care va forța unity să o adauge ca variabilă în clasa adăugată pe obiect având posibilitatea de a face drag and drop obiectelor a căror collidere vrem să fie ignorate, direct în variabilă. Acest lucru este foarte util când lucrăm cu obiecte dinamice de tip AI care se deplasează în ambele direcții și care în mod normal nu ne-ar lăsa să poziționăm alte obiecte pe ruta lor de deplasare deoarece ei s-ar lovi de ele și ar pica de pe platformă.

3.5 Canvas

Adăugarea unui element de interfață de utilizator creează automat un canvas care va fi afișat pe ecranul jocului. Acest obiect poate fi text, imagine, butoane etc. El are mai multe întrebuințări precum crearea meniului jocului, afișarea unor elemente pe ecranul utilizatorului, cum ar fi viața caracterului, timpul rămas, punctele acumulate, etc.

În canvas-ul din scena jocului am creat o bară de viață, numărul de monede acumulate de-a lungul jocului, împreună cu o imagine cu moneda culeasă lângă el și un meniu de pauză.

Pentru bara de viață a caracterului am folosit două obiecte.

Figura 11. Obiectele folosite pentru afișarea vieții personajului.

Primul reprezintă bara de viață goală, iar a doua este nivelul de viață al caracterului, căreia i-am modificat tipul de imagine din simplu în umplut și metoda de umplere orizontală din direcția stângă; așadar aceasta primește o valoare de umplere a imaginii de implicit unu, însemnând că va fi afișată fără nici o modificare, iar valoarea zero va face imaginea să dispară complet, lăsând în urmă doar bara de viață goală. Valoarea și imaginea vor scădea cu un procentaj de 20% la fiecare lovitură primită de caracter, până când el își va pierde toate punctele de viață, imaginea va dispărea complet și valoarea va ajunge pe zero.

Pentru afișarea numărului de monede colectate pe ecran, am creat o clasă și o variabilă de tip text, căreia i-am atribuit imaginea de tip text din canvas și care este accesată și modificată direct din cod la fiecare monedă colectată.

Meniul de pauză este implicit invizibil, dar se face vizibil doar la apăsarea tastei „p” de pe tastatură, moment în care setez timpul din joc pe zero și acesta îngheață, unu fiind timpul real, până la apăsarea din nou a tastei „p”. El apare afișat printr-o animație care închide la culoare tot jocul și face să apară butoanele.

Figura 12. Meniul de pauză.

3.6 RigidBody

Rigidbody-ul este de asemenea o componentă din Unity. Am folosit această componentă pentru a adăuga caracterului meu legi precum gravitație și masă. I-am înghețat rotația axei Z pentru ca la accelerare să nu cadă pe spate și am creat un nou tip de material cu zero frecare și ricoșare la impactul cu pământul pe care l-am atașat tuturor platformelor, obiectelor și caracterelor, deoarece din cauza velocității constante primite de către caracter în timpul mersului, la impactul cu obiectele, acestea l-ar face să fie blocat în ele, ignorând gravitația.

3.7 Caracterul principal

Figura 13. Personajul principal din joc.

Caracterul principal este un ninja. El se poate deplasa la stânga și la dreapta, poate sări și dispune de o sabie în arsenal lui cu care poate ataca sau pe care o poate arunca înspre inamicii de tip ninja.

Săritura lui este folosită în momentul apăsării butonului Space. În funcție de durata apăsării butonului, caracterul va sări mai încet sau mai tare și va sta mai mult în aer. Folosind acest lucru în mod eficient, putem trece mult mai ușor peste multe obstacole. De exemplu, dacă avem de sărit peste o prăpastie, însă deasupra ei sunt țepi, va trebui să folosim săritura scurta pentru a trece peste prăpastie, dar totodată pentru a nu intra în țepi. Un alt exemplu în care săritura lunga este foarte folositoare este la platformele mobile care intra sub apă. Putem să folosim săritura înainte de momentul scufundării platformei în apa, astfel vom sta în aer destul până când aceasta va ieși din apă și în felul acesta vom rămâne în viață.

Abilitatea de a ataca cu sabia la distanțe scurte este executată prin apăsarea butonului „c” de pe tastatură și are un timp de reactivare de 1.5 secunde. Aceasta îi va înlătura 20% din punctele de viață ale inamicului ninja.

Abilitatea de a arunca sabia se folosește prin apăsarea butonului „v” și are un timp de reactivare de 1.5 secunde. La fel ca prima abilitate, aceasta va înlătura 20% din punctele de viață. Ambele abilități au timp de reactivare pentru a face mai greu jocul și a nu permite utilizatorului să câștige jocul prin apăsarea unui singur buton. Ele trebuiesc folosite împreună pentru a învinge inamicul ninja.

3.8 Inamicul ninja

Figura 14. Inamicul ninja.

Inamicul ninja este făcut să fie inamicul principal și cel mai greu de învins din întregul joc. Acesta are două abilități și funcționează pe același principiu ca și caracterul ninja. Acesta se află pe o platformă care conține două obiecte invizibile la capetele ei care vor indica poziția maxima până la care inamicul poate ajunge. El dispune de viziune vastă în fața lui și considerabil mai mică în spatele lui pentru a nu putea fi luat prin surprindere. În momentul în care caracterul intră în raza lui de viziune, inamicul va începe prin a arunca cu un cuțit în direcția lui și va înainta înspre el, când este destul de aproape va schimba modul de atac pe atacul cu sabia. Singurul mod de a scăpa este acela de a-l omorî înainte ca punctele de viață să ajungă la zero sau a fugi de pe platforma inamicului pe una cu un nivel mai jos deoarece el nu ne va urma și va aștepta momentul oportun pentru atac, fiindcă atunci când caracterul nu se mai află în raza lui de viziune, inamicul va începe iar să patruleze. Pentru a omorî inamicul este nevoie de cinci lovituri fie cu sabia, fie prin aruncarea acesteia, pentru că fiecare lovitură îndepărtează 20% din punctele de viață ale inamicului, însă și inamicul are nevoie de tot la fel de multe lovituri pentru a te omorî.

3.9 Implementarea caracterului și a inamicului ninja.

Primul pas a fost acela de a adăuga componente precum Box Collider 2D și Rigidbody 2D pentru a le da gravitație, masă și coliziune caracterului și inamicului.

La implementarea caracterului ninja și a inamicului ninja am creat o clasă caracter care va fi moștenită de clasa caracterului, dar și a inamicului. În această clasă am făcut implementarea tuturor elementelor pe care caracterul și inamicul le au în comun: schimbarea direcției de deplasare, aruncarea armei, atacul cu sabia, viteza de deplasare, coliziunea sabiei, metode pentru atac și pentru scăderea punctelor de viață, o metodă care verifică dacă caracterul sau inamicul este mort și o metodă care se activează la intrarea în contact cu sursele de obiecte care pot să scadă din punctele de viață.

Pentru a face caracterul principal să se poată deplasa în stânga și dreapta, am creat o variabilă de tipul int, căreia i-am setat implicit un număr reprezentând viteza de deplasare și o altă variabilă moveX. Variabilei moveX i-am atribuit Input.GetAxis („Horizontal”) care are rolul de a primi direcția stânga sau dreapta în funcție de butonul apăsat de la tastatură. Apoi, accesând rigidbody-ul caracterului, i-am dat o velocitate calculată în funcție de direcția de deplasare înmulțită cu viteza setată anterior și velocitatea coordonatei y, cu scopul de a putea schimba direcțiile și în aer.

Pentru a face caracterul să poată sări, i-am adăugat un gameObject invizibil poziționat la picioarele acestuia și, la fiecare platformă de pe care el poate să sară, i-am modificat stratul curent în unul creat de mine, pe care l-am denumit Pământ. În cod am creat o variabilă booleană isGrounded care verifică dacă caracterul este în contact cu stratul pământ. În caz afirmativ, aceasta se setează pe adevărat. În metoda Update, se verifică constant dacă variabila este adevărată, și dacă utilizatorul apasă tasta Space de pe tastatură. Rigidbody-ului caracterului îi vom atribui o velocitate verticală și vom seta iar variabila isGrounded pe fals pentru a evita săriturile multiple. Pentru a putea controla săritura acestuia în funcție de durata apăsarii tastei “space”, în metoda FixedUpdate, care este apelată în mod constant, am verificat ca atunci când personajul se află în aer și velocitatea coordonatei lui y este mai mică ca zero, adică fix momentul când începe să cadă către pământ i-am modificat velocitatea y a caracterului prin mărirea gravitației și astfel ai recrea un efect de cădere mai rapid. În mod contrar, când personajul se află în ascensiune și nu mai apasă pe tasta “space”, am schimbat gravitația astfel încât să recreez un efect de săritură scurtă.

Figura 15. Funcția care controlează nivelul de săritura a personajului în funcție de durata apăsată.

Pentru funcția de atac cu sabia am creat un gameobject căruia i-am adăugat un boxcollider2d, l-am setat pe isTrigger, l-am poziționat în fața caracterului respectiv a inamicului și l-am dezactivat. Acest collider va fi activat doar atunci când utilizatorul va apăsa tasta „c” de pe tastatură și când variabila attacking este pe fals. Pentru implementare, am creat o metodă folosită atât la caracter, cât și la inamicul ninja, care va seta boxcollider-ul pe activ până la rularea animației, iar apoi din nou pe fals. Pentru atacul de la distanță, armele care vor fi aruncate nu sunt prezente în scenă decât la momentul aruncării lor când acestea trebuie instanțiate. Sabiei aruncate de caracter i-am atașat un edgecollider2d setat pe isTrigger și un rigidbody2d cu gravitația setată pe zero, iar în cod, am verificat direcția caracterului în momentul aruncării sabiei și în funcție de asta am inversat traiectoria și poziționarea sabiei.

Figura 16. Funcțiile folosite la atacul și aruncarea sabiei.

Atât caracterul, cât și inamicul ninja au o listă de etichetă care specifică sursele de la care pot să fie loviți. În metoda OnTriggerEnter2D verific dacă collider-ele de pe aceste surse au intrat în contact cu caracterul sau inamicul ninja; în caz afirmativ, aceștia își vor pierde din viață. În momentul atacului, o variabilă attacking o setez pe adevărat, attackTimer primește un timp de 1.5 secunde și se pornește o numaratoare inversă până când utilizatorul poate ataca din nou. În cazul atacului de la distanță, logica de atac si cronometru funcționează pe același principiu. Atât sabia caracterului, cât și cuțitul inamicului se vor autodistruge după un timp de 1.4 secunde de la aruncarea lor.

Pentru inamicul ninja am creat 7 clase. Una din ele se cheamă IEnemyState și e o interfață care este moștenită de încă alte 4 clase. Ea are 4 metode care sunt automat implementate de celelalte 4 clase: execute, enter, exit și onTriggerEnter. Fiecare clasă reprezintă un stagiu anume în care se află inamicul, ele fiind în continuă schimbare. Stagiile sunt: repaus, patrulare, atacul cu sabia și, respectiv, aruncarea cuțitului. La pornirea jocului, inamicul primește stagiul de repaus în care va sta un număr de secunde între intervalul 2-10, după care își va schimba stagiul în cel de patrulare pe platformă într-o direcție până la coliziunea cu punctele extreme poziționate la capetele platformei, moment în care își va schimba direcția de deplasare, sau până la terminarea stagiului de patrulare care durează un număr de secunde la întâmplare, la fel ca cel de repaus. În cazul în care este atacat de caracter, el va intra în modul de atac și, în funcție de distanța față de caracter, el va fi atacul cu sabia sau aruncarea cuțitului. În clasa principală a inamicului ninja avem două funcții boolene care verifică în mod constant dacă caracterul ninja se află la distanță scurtă moment în care va intra în stagiul de “MeleeState” sau o distanță mai lungă la care va intra în stagiul “RangedState”. Înainte de fiecare atac se verifică dacă distanța este cea potrivită pentru atacul din stagiul respectiv, în caz contrar inamicul își va schimba stagiul.

Figura 17. Funcțiile booleene care testează distanța inamicului față de caracter.

Un alt mod de a intra în stagiul de atac este atunci când caracterul intră în raza lui de viziune, moment în care inamicul își va seta ca țintă caracterul până la ieșirea din rază. Raza lui de viziune am reprezentat-o printr-un Collider reprezentat cu dreptunghiul lung din figura de mai jos, pe care l-am setat pe isTrigger, acest lucru face ca doar la trecerea personajului prin el, ca collider-ul să fie notificat.

Figura 18. Raza de viziune a inamicului.

Pentru a-i da un avantaj caracterului, am adăugat o stare numită imortalitate care se declanșează în momentul când acesta își pierde din punctele de viață. Ea durează 1.5 secunde și va face caracterul sa apară și dispară în mod repetat pe timpul acestei durate și variabila booleană immortal se va seta pe adevărat. Pentru a face caracterul să dispară și să reapară în mod repetat, am folosit funcția StartCoroutine, căreia i-am atribuit o altă funcție, anume ShowImmortality. Aceasta va dezactiva și va reactiva în mod repetat la un interval de 0.1 secunde imaginea caracterului. După durata de 1.5 secunde, variabila immortal va fi setată înapoi pe fals, iar caracterul va deveni vulnerabil.

Figura 19. Funcțiile pentru scăderea punctelor de viață și a imortalității.

3.10 Animații

Caracterul principal are animațiile împărțite în două straturi principale. Stratul care conține animațiile executate pe pământ „BaseLayer” și cel pentru animațiile din aer „AirLayer”.

În baselayer avem animații pentru pierderea punctelor de viață și pentru moartea caracterului,

Figura 20. BaseLayer-ul care conține toate harta animațiilor executate pe pământ de caracter.

precum și cele pentru alergat, atacul cu sabia și aruncarea ei, care sunt grupate într-o stare de mișcare „ActionStates”, și parametrii și condițiile necesare pentru a putea face tranzițiile între animații.

Tranzițiile dintre fiecare animație sunt făcute cu ajutorul parametrilor creați și setați pe ele din Unity. Ei pot fi de mai multe tipuri: float, bool, int, trigger, dar sunt schimbați sau declanșați cu ajutorul codului.

Figura 21. Lista parametrilor folosiți pentru tranzițiile dintre animații.

În animația PlayerDamage a caracterului și EnemyDamage a inamicului, am adăugat o clasă de tip comportament, care are rolul în a notifica momentul când animația are loc și, ca urmare, atât inamicul, cât și caracterul ninja își vor pierde velocitatea de mișcare pe timpul rulării animației și li se vor întrerupe animațiile curente.

Figura 22. Animațiile din „ActionStates” ale caracterului.

Pe de altă parte, în „AirLayer” avem animații pentru săritură și căzatură.

Figura 23. Animațiile din „AirLayer” executate doar în aer.

Schimbarea din layer-ul „BaseLayer” în „AirLayer” se face la testarea variabilei isGrounded, moment în care se activează „AirLayer-ul” și animațiile respective pot fi vizibile.

Figura 24. Schimbarea Layer-urilor.

Pentru inamicul ninja avem un singur layer care conține animațiile de atac cu sabia, aruncarea cuțitului, alergare, pierdere din punctele de viață și moarte.

Figura 25. Toate animațiile inamicului ninja.

3.11 Mushroom enemy

Figura 26. Inamicul de tip mushroom.

Inamicul de tip mushroom este unul foarte popular în jocurile de genul 2D platformer și se regăsește în renumitul joc Mario, fiind un inamic ușor de învins. Acesta se deplasează într-o direcție până lovește un zid, iar apoi schimbă direcția de deplasare. În momentul coliziunii cu caracterul nostru din lateral, caracterul nostru va muri instant, singurul mod de a ucide acest inamic fiind de a sări pe capul lui; prin urmare, caracterul nostru va sări automat în aer, iar inamicul va cădea prin platformă, lăsând în urma lui o monedă.

În cazul inamicului de tip mushroom pentru implementare, în metoda OnCollisionEnter2d a caracterului am accesat punctele extreme ale collider-ului caracterului, în acest caz fiind punctele x si –x de pe axa xoy, iar la coliziunea cu inamicul din lateral, caracterul își va pierde toate punctele de viață. De asemenea și punctul extrem – y, adică picioarele caracterului. La coliziunea lor cu capul inamicului, am instanțiat o monedă nouă , i-am dezactivat coliziunea inamicului, i-am mărit gravitația și i-am oprit abilitatea de a se deplasa.

Figura 27. Funcția pentru atacul inamicului mushroom și moartea lui.

3.12 Țepii

Țepii sunt capcane statice care, la coliziunea cu ele, îți vor lua din punctele de viață, scopul fiind evitarea lor pe cât posibil. Atunci însă când asta este imposibil, ele îți vor lua doar 20% din punctele de viață și vei avea șansa de a te deplasa de lângă ele până îți vor lua din viață din nou din cauza imortalității. Sunt mai multe tipuri de țepi, singura diferență fiind dimensiunea și aspectul lor.

3.13 Apa

Apa prezintă un alt obstacol peste care caracterul trebuie să treacă folosind platformele mobile, așadar am adaugat-o în mai multe locații ale jocului, în general acestea fiind lângă platforme. Căderea în apă va omorî caracterul instant și nivelul va reîncepe. Poziția coordonatei y a apei pe axa xoy este mai mică decât cea a platformelor celor mai joase care este zero, iar la valoarea de y = -6.5 a caracterului, acesta va muri, în cazul de față neexistând alte platforme mai joase de zero, așa că doar contactul cu apa va declanșa această condiție.

3.14 Platforme mobile

După cum menționează și numele, platformele mobile sunt platforme dinamice care se mișcă constant dintr-o direcție dată în alta. Cu ajutorul lor se pot trece peste unele obstacole, sau se pot colecta monezi din locuri în care altfel nu am putea ajunge. Unele platforme mobile au posibilitatea să te și omoare, deoarece traiectoria lor de deplasare ajunge în apă. Pentru a evita lucrul acesta, caracterul va fi nevoit să sară pe o altă platformă. Răbdarea este necesară pentru a trece peste ele nevătămat, însă și calcularea vitezei de deplasare a fiecăreia pentru a găsi momentul potrivit în care ele se sincronizează perfect pentru a te lăsa să treci.

3.15 Implementarea platformelor mobile

Fiecare platformă mobilă are ca și childobject un gameobject invizibil, el reprezentând doar poziția B a traiectoriei de deplasare a platformei, poziția A fiind poziția inițială a platformei. Poziția B se așează manual în locul până unde vrem ca platforma să se deplaseze. În cod avem două variabile, una fiind poziția A, iar cealaltă poziția B. În metoda move facem ca platforma să se deplaseze de la poziția A la B folosind Vector2.MoveTowards. Când platforma ajunge la poziția B, variabilele își inversează pozițiile. De asemenea, pentru a face caracterul să poată sta pe platforma în deplasare și pentru a se mișca odată cu ea, la coliziunea cu ea caracterul devine un childobject al platformei, iar coordonatele acestuia sunt modificate după cele ale platformei până în momentul când acesta nu mai se află pe platformă.

Figura 28. Metoda folosită de platformele mobile pentru deplasare și schimbare a direcției.

3.16 Monede

Figura 29. Monedele din joc.

Monedele au o animație de rotație; ele apar în mai multe locuri în joc, pe jos, dar și la învingerea inamicilor; se va genera o monedă sau două, în funcție de tipul de inamic învins. Colectarea lor nu este necesară pentru a termina nivelul, însă la sfârșit numărul monedelor colectate de-a lungul jocului va fi afișat pe ecran.

3.17 Poțiuni de viață

Figura 30. Poțiunea de viață.

Poțiunile de viață sunt folosite pentru a-ți mări viața cu 20% și pentru a avea mai multe șanse de învingere a inamicilor, de obicei găsite înainte de lupta cu un inamic mai puternic. Colectarea acestora în cazul în care viața ta este plină va face ca acestea să dispară automat iar viața ta rămâne la fel. Poțiunile pot fi colectate doar de caracter.

3.18 Platforme

Platformele sunt obiecte statice care acționează ca o suprafață solidă pe care caracterul sau inamicii pot să stea. Ele nu au gravitație, deci pot fi poziționate în aer pentru a acționa ca niște scări. Ele devin solide doar când caracterul se află deasupra lor, făcând astfel posibilă trecerea prin ele de dedesubt sau din lateral printr-o săritură prin ele. Acestea sunt folosite în multe jocuri și sunt foarte utile.

3.19 Portalul de sfârșit

După depășirea tuturor obstacolelor, caracterul nostru ajunge la sfârșitul jocului, unde se află un portal. La pășirea prin portal, jocul va lua sfârșit și se va încărca scena de sfârșit de joc unde ne vor fi afișate numărul de monede colectate în total și de câte ori acesta a murit în încercarea de a termina jocul. De asemenea, vom avea și un mesaj de felicitare a jucătorului, iar utilizatorul va avea opțiunea de a juca din nou jocul, sau de a ieși din el.

Contribuții personale

Pot să menționez câteva contribuții aduse de mine pe partea vizuală a jocului. M-am folosit mult de Photoshop pentru editarea obiectelor. Pentru marea parte a copacilor folosiți în joc am descărcat mai multe brush-uri cu modele interesante și abstracte, pe care apoi le-am modificat cu ajutorul lui Unity unde le-am schimbat culorile și mărimile. Pentru animația portalului de la sfârșit am găsit un GIF care deoarece Unity nu suportă în prezent folosirea obiectelor de tip GIF, folosind un tool online, am despărțit GIF-ul în mai multe fragmente, apoi selectarea lor și adăugarea în Unity va crea automat o nouă animație.

Totodată sabia caracterului am decupat-o din caracter și am adăugat-o în Unity creând un obiect nou căruia apoi i-am adăugat funcții și componente.

Crearea nivelului jocului a fost o altă contribuție adusă de mine. După implementarea tuturor lucrurilor, am lăsat nivelul pe sfârșit. Spre exemplu la deplasarea platformelor mobile, în a oferi o șansă viabilă jucătorului au necesitat o serie de calcule și încercări, deoarece fiecare platformă se deplasează la o viteză diferită. De asemenea am vrut ca mișcarea lor și a obiectelor dinamice din joc în general, să se sincronizeze cu muzica din joc cu scopul de a crea un ritm mai rapid care amplifică atmosfera întunecată deja creată de obiectele vizuale.

Pe partea de performanță a jocului am reușit să o îmbunătățesc modificând unele setări din Unity care afectau performanța considerabil dar nu aduceau nici un plus din punct de vedere vizual. Setări precum: V-Sync, Anti-Aliasing, etc. Performanța primită a fost incredibilă, astfel am reușit să trec de la 60-80 Frames per second și un început greu al jocului la prima rulare, la 700 și o diferența enormă în timpul de încarcare. O performanță aproape de 10 ori mai bună ca înainte. 60 Frames per second fiind idealul căutat de jucatori dar mai mult fiind întotdeauna binevenit.

Concluzie

În încheierea acestei lucrări, voi prezenta un număr de idei și posibile îmbunătățiri pe care doresc să le integrez în viitor în joc.

Pentru a putea publica acest joc, va trebui să mă asigur că toate obiectele ce țin de aspectul vizual folosite în crearea nivelului nu sunt protejate de drepturi de autor. Deși o mare parte din obiectele folosite de mine nu sunt, intenționez să fac un parteneriat cu un prieten designer a cărui sarcină va fi aceea de a crea obiecte, imagini, caractere și, de asemenea, animații noi. Deoarece Unity este un motor de programare convenabil, face ca schimbarea tuturor obiectelor vizuale să fie foarte ușoară. De asemenea, doresc să creez mai multe nivele, iar pe partea de programare să mai adaug funcționalități caracterului, precum: săritură dublă și triplă, teleportare, niveluri pentru caracter cu îmbunătățirea abilităților și mai multe tipuri de atac, fiecare necesitând o animație proprie, precum și mai multe tipuri de caractere din care să putem alege.

Mai doresc să adaug inamici noi mai dificili de învins la fiecare nivel și o poveste care să lege toate elementele și să atragă jucătorul în spațiul virtual. Pe lângă aceasta, sunt deschis și la ideea de a face o variantă multiplayer a jocului, unde jucătorii pot juca fie între ei, fie împreună ca echipă pentru a completa niveluri mai grele.

De-a lungul creării jocului pentru licență, am realizat că la asta vreau să lucrez după terminarea acestei lucrări și am luat în considerare accesarea site-urilor precum Kickstarter sau Steam Greenlight pentru șansa de a fi sponsorizat. În prezent, proiectele de jocuri sunt printre cele mai sponsorizate, deoarece există o mare comunitate de jucători care caută în permanență jocuri noi și vor să contribuie la sponsorizarea lor. Cu ajutorul unei sponsorizări aș putea să găsesc o echipă mică de oameni dedicați și împreună am putea realiza un produs final finisat.

Ca să concluzionez, doresc să menționez că implementarea jocului pentru lucrarea de licență mi-a luat aproximativ trei luni, timp în care a trebuit să învăț Unity începând cu bazele lui, dar și C#, cu care eram doar puțin familiar. Cu ajutorul multor tutoriale, am reușit să aduc jocul în stagiul în care este acum. De asemenea, sunt de părere că am realizat un joc scurt, dar distractiv și cu un nivel de dificultate destul de mare. Totodată, tind să cred că am creat bazele principale necesare și o implementare interesantă a lor într-un joc 2D cu ajutorul cărora pot continua în a aduce îmbunătățiri pe viitor.

Bibliografie

Capitolul I

www.accod.wordpress.com

www.ipfs.io

www.istoriajocurilorvideo.weebly.com

www.jesperjuul.net

www.onlinedesignteacher.com

www.playtech.ro

www.revanglasses.ro

www.stichtingspel.org

www.wikipedia.org

Capitolul II

www.digitaltrends.com

www.mcvuk.com

www.wikipedia.org

Capitolul III

www.docs.unity3d.com

www.wikipedia.org

Anexă: Tabel cu toate figurile folosite:

Similar Posts