Aceasta lucrare are ca scop realizarea unui joc 3D în programul Unity cu ajutorul limbajului de programare C#. Pentru implementarea aplicației s-a… [302049]

1.Introducere

1.1 Contextul Proiectului

Aceasta lucrare are ca scop realizarea unui joc 3D în programul Unity cu ajutorul limbajului de programare C#. Pentru implementarea aplicației s-a [anonimizat] 3D și 2D.

Jocul este destinat pasionaților de jocuri cu mașini și conține 3 moduri de joc care pot fi alese din meniul aplicației. Pe lângă acestea jocul mai oferă posibilitatea de-a alege între 3 mașini care vor fii folosite în joc.

Aplicația poate fii folosită atât pe Windows cât și pe Mac dar există posibilitatea ca jocul să fie convertit și pentru Android sau iOS.

[anonimizat] C#. În următoarele 2 sunt descrise tehnologiile folosit în realizarea jocului.

Principalele programe pentru realizarea jocului sunt Visual Studio în care a fost implementat codul și Unity folosit pentru partea grafica a aplicației.

În ultimul capitol este prezentarea jocului pornind de la etapa de proiectare până la implementarea și utilizarea acestuia precum și secvențe din codul sursă.

2.Tehnologii Folosite

2.1 Limbajul de programare C#

C# [anonimizat][2]:

imperativ

declarativ

funcțional

generic

orientat pe obiecte

Acesta a fost dezvoltat în anul 2000 de către Microsoft în cadrul inițiativei .NET și a fost aprobat de către Ecma și ISO.

C# este unul dintre limbajele de programare concepute pentru infrastructura lingvistică comună[2].

C# este un limbaj elegant și sigur care permite dezvoltatorilor să construiască o varietate de aplicații sigure și robuste care rulează pe .NET Framework. Se poate utiliza C# pentru a [anonimizat], [anonimizat], [anonimizat].

Visual C# [anonimizat] a ușura dezvoltarea aplicațiilor bazate pe limbajul C# și pe NET Framework[3].

C# [anonimizat].Mai mult de o treime din cele mai bune jocuri sunt realizate în Unity și există aproximativ 770 de milioane de utilizatori activi de jocuri create cu ajutorul Unity.

Unity este folosit de asemenea și pentru tehnologia VR cu 90% din toate echipamentele Samsung Gear și 53% din toate jocurile Oculus Rift VR dezvoltate folosind motorul de joc Unity[4].

În timpul dezvoltării .[anonimizat] C. În ianuarie 1999 Anders Hejlsberg a format o echipă pentru a construi un nou limbaj în acel moment numit Cool care era pentru C-like Object Oriented Language.

Microsoft a considerat păstrarea numelui Cool ca nume final al limbajului dar a ales să nu facă acest lucru din motive comerciale. Până când proiectul .NET a fost anunțat public la conferința de dezvoltatori profesioniști din iulie 2000 limbajul a fost redenumit C# [anonimizat].NET au fost portate la C#.

using System;

using System.Windows.Forms;

class Program

{

static void Main()

{

MessageBox.Show("Salut, lume!");

Console.WriteLine("Aproape același argument!");

}

}

Această linie scrie rezultatul. Consola este o clasă statică în spațiul de nume al sistemului.

Oferă o interfață pentru intrările standar și fluxurile de erori pentru aplicațiile console. Programul numește metoda WriteLine din Consolă care afișează pe consolă o linie cu argumentul șirul „Salut, lume!”.

2.2 Unity

Unity este o platformă pentru jocuri dezvoltate de Unity Technologies anunțat inițial că va fi lansat în iunie 2005 la Conferința Mondială a dezvoltatorilor de la Apple ca o platformă de jocuri exclusiv pentru OS X[1].

Din 2018 soft-ul Unity a fost extins pentru a susține 27 de platforme.Unity poate fi folosit atât pentru dezvoltarea jocurilor tridimensionale (3D) cât și bidimensionale (2D) precum și simulări pentru desktop-uri, console,laptop-uri, dispozitive mobile, etc.

De când a fost lansat Unity a existat o mulțime de versiuni ultima dintre ele fiind Unity 2018 2.2 lansată la data de 10 august 2018.

Unity era suportat doar pe Windows și pe MacOS având și o versiune pentru platforma Linux care era experimentală însă.

În ultimii ani Unity s-a dezvoltat foarte mult și acum se construiesc jocuri cu ajutorul lui pentru 27 de platforme diferite: iOS, Android, Tizen, Windows, Universal Windows Platform, Mac, Linux, WebGL, PlayStation 4, PlayStation Vita, Xbox One, Wii U, 3DS, Oculus Rift, Google Cardboard, SteamVR, PlayStation VR , Gear VR, Windows Mixed Reality, Daydream, Android TV, Samsung Smart TV, tvOS, Nintendo Switch, Fire OS, Facebook Gameroom, ARKit Apple, Google ARCore și Vuforia[1].

Unity are 4 opțiuni de licențiere fiecare având funcționalități diferite în funcție de licența deținută.

Licența Pro acordă acces la asistență premium precum și raportarea performanțelor iar versiunea Enterprise permite accesul la codul sursă al Unity și oferă o soluție personalizată pentru multiplayer.

Unity are și o versiune gratuită care are câteva minusuri însă este foarte bună pentru un începător.

Unity oferă utilizatorilor posibilitatea de a crea jocuri atât în ​​2D cât și în 3D, iar motorul oferă un API primar de scripting în C #, atât pentru editorul Unity sub formă de pluginuri, cât și pentru jocurile în sine, precum și pentru funcțiile de tragere și plasare. Înainte ca C # să fie limba de programare primară utilizată pentru motor, ea a susținut anterior Boo, care a fost eliminat în versiunea Unity 5, și o versiune de JavaScript numită UnityScript, care a fost depreciată în august 2017 după lansarea Unity 2017.1 în favoarea C #.[1]

Motorul are suport pentru următoarele interfețe grafice API: Direct3D pe Windows și Xbox One; OpenGL pe Linux, MacOS și Windows; OpenGL ES pe Android și iOS; WebGL pe web; și API-urile proprietare pe consolele de jocuri video. În plus, Unity acceptă API-urile de nivel inferior Metal pe iOS și macOS și Vulkan pe Android, Linux și Windows, precum și Direct3D 12 pe Windows și Xbox One.

În cadrul jocurilor 2D, Unity permite importul de sprite și un avansat renderer 2D din lume. Pentru jocurile 3D, Unity permite specificarea compresiei texturilor, a mipmaps-urilor și a setărilor de rezoluție pentru fiecare platformă pe care suportă motorul jocului și oferă suport pentru cartografiere brute, cartografierea reflecției, maparea paralaxelor, ocluzia ambientală a spațiului ecranului (SSAO) umbre cu hărți umbrite, efecte rendering-to-texture și efecte post-procesare full-screen. Unity oferă, de asemenea, servicii pentru dezvoltatori, acestea fiind: Unity Analytics, Unity Analytics, Unity Certification, Unity Cloud Build, Unity Everyplay, Unity IAP, Unity Multiplayer, Unity Performance Reporting, Unity Collaborate și Unity Hub.

Unity susține crearea de vertexe personalizate, fragmente (sau pixeli), tessellation, shaders de calcul și unități de shadere de la Unity folosind Cg, o versiune modificată a limbajului Microsoft Shading High Level dezvoltat de Nvidia.[1]

În 2012, VentureBeat a spus: "Câteva companii au contribuit la fel de mult la fluxul de jocuri produse independent ca Unity Technologies .

Mai mult de 1,3 milioane de dezvoltatori folosesc instrumentele sale pentru a crea grafica gee-whiz în iOS, Android, consola, PC-uri și jocuri bazate pe web .

2.3 Magazin Asset Unity

Unity asset store găzduiește o bibliotecă tot mai mare de bunuri gratuite și comerciale create atât de Unity Technologies cât și de membrii comunității.

O varietate largă de asset-uri este disponibilă acoperind totul de la texturi, modele și animații până la exemple întregi de proiect, tutoriale și extensii de editor.

Puteți accesa asset-urile dintr-o interfață simplă încorporată în Unity Editor care vă permite să descărcați și să importați asset-uri direct în proiectul dumneavoastră.

Pentru a deschide fereastra Asset Store, selectați Window Asset Store din meniul principal Unity. În timpul primei vizite puteți crea cont de utilizator gratuit care vă permite să vă conectați la magazin la vizitele viitoare și să urmăriți achizițiile și descărcările anterioare.

Fig 1 Magazin Unity Asset

Magazinul oferă o interfață asemănătoare browserului care vă permite să navigați prin căutare text liber, fie prin navigarea în pachete și categorii.

Unity este un mediu de dezovltare al jocurilor video pentru desktop-uri, console, smartphone-uri și în acest moment se pot construi jocuri pentru 27 de platforme diferite.

Unity Technologies a anunțat inițial că va fi lansat în iunie 2005 la Conferința Mondială a dezvoltatorilor de la Apple ca o platformă de jocuri exclusiv pentru OS X iar în acest moment cea mai nouă versiune este Unity 2018.2.2.

Mediul de dezvoltare

3.1 Unity

Unity vrea să fie motorul jocurilor cu mai multe platforme, perioadă. Pentru premiile Apple Design la ediția comercială a revistei WWDC din 2006, Apple, Inc. a numit Unity drept liderul pentru cea mai bună utilizare a categoriei Mac OS X Graphics, la un an după lansarea Unity la aceeași expoziție comercială. Unity Technologies spune că aceasta este prima dată când un instrument de proiectare a jocului a fost vreodată nominalizat pentru acest premiu.

Un sondaj din mai 2012 al revistei Game Developer a indicat unitatea ca motor de joc de top pentru platforme mobile.

În iulie 2014, Unity a câștigat premiul "Cel mai bun motor" la Premiile Excel Industry Excellence Award din Marea Britanie. [1]

Unity 5 a fost întâmpinat cu o laudă similară, iar The Verge a afirmat că "Unitatea a început cu scopul de a face dezvoltarea jocului universală accesibilă . Unity 5 este un pas mult așteptat spre acest viitor".

În urma lansării Unity 5, Unity Technologies a făcut unele critici pentru volumul mare de jocuri produse rapid, publicate pe platforma de distribuție Steam de către dezvoltatorii neexperimentați. CEO-ul John Riccitiello a declarat într-un interviu că consideră că aceasta este un efect secundar al succesului Unity în democratizarea dezvoltării jocurilor: "Dacă aș fi avut drumul meu, aș vrea să văd 50 de milioane de oameni care folosesc Unity – deși nu cred vom ajunge acolo în curând, aș vrea să văd elevii de liceu și colegii care le folosesc, oameni din afara industriei de bază, cred că este trist faptul că majoritatea oamenilor sunt consumatori de tehnologie și nu creatori. locul în care oamenii știu să creeze, nu doar să consume, și asta încercăm să promovăm.

În decembrie 2016, Unity Technologies a anunțat că va schimba sistemul de numerotare a versiunilor pentru Unity de la identificatori bazați pe secvență până la anul de lansare pentru a alinia versiunea cu cadența lor mai frecvente de eliberare.[1]

În data de 16 decembrie 2013, Unity Technologies a dezvăluit noi capturi de ecran pentru un personaj oficial mascot numit Unity-chan, numele real Kohaku Otori cu exponatul în cadrul evenimentului “Comic Market 85” din Tokyo Big Sight, unde vor fi distribuite produse tematice.

Datele din joc ale personajului trebuiau lansate în primăvara anului 2014. Personajul a fost conceput de Unity Technologies ca personaj eroină cu sursă deschisă.

Compania permite utilizarea Unity-chan și a celorlalte caractere în proiecte secundare, sub anumite licențte. Un exemplu este Unity-chan care apare ca personaj în Runbow.

Popularitatea personajului a condus și la apariția sa în adaptările VOCALOID, incluzând propria sa bibliotecă de sunte pentru VOCALOID4 și o adaptare specială VOCALOID concepute pentru a lucra cu versiunea Unity Engine 5.0 numită Unity Vocaloid.

3.2 Visual Studio

Microsoft Visual Studio este un mediu integrat de dezvoltare (IDE) de la Microsoft.Acesta find folosit pentru dezvoltare de programe pe calculator, site-uri web, aplicații web, servicii web și aplicații mobile.

Visual Studio utilizează platforme de dezvoltare software Microsoft cum ar fi Windows API, Windows Forms, Windows Presentation Foundation, Windows Store și Microsoft Silverlight[5].

Microsoft Visual Studio Express este un set de medii de dezvoltare integrate (IDE) dezvoltate de Microsoft ca o versiune limitată de funcționalitate freeware și registerware a Microsoft Visual Studio non-free. Edițiile Express au început cu Visual Studio 2005.

Visual Studio Express a fost predecesorul lui Visual Studio care este disponibilă gratuit dar cu licență diferită. Față de Visual Studio Express noua licență este mai prietenoasă pentru open-source dar mai puțin pentru unii dezvoltatori de surse închise.

Ediția Community funcționează cu plugin-uri, o caracteristică care era exclusivă înainte pentru edițiile plătite[6].

Serviciile lingvistice integrate oferă support pentru diferite limbaje bine cunoscute precum: C#, C++, VB și F#), serviciile lingvistice pot fi instalate și separat inclusiv Python și Ruby.

Visual Studio are versiuni care acceptă și limbaje individuale, care reprezintă o soluție foarte bună pentru începători deoarece aceștia au nevoie numai de Visual Basic sau utilizatori avansați care lucrează la aplicații de procesare rapidă și care au nevoie continuu de Visual C# sau Visual C++, dar care nu sunt interesați de aplicații de nivel mic[7].

Visual Studio nu suportă niciun limbaj de programare, soluție sau instrument intrinsic, în schimb permite conectarea funcționalității codificate ca pachet VSP.

Când este instalat funcționalitatea este disponibilă ca serviciu. IDE oferă 3 servicii:

SVsSolution care oferă posibilitatea de-a enumera proiecte și soluții.

SVsUIShell care oferă funcționalități ferestre și UI

SVsShell care se ocupă de înregistrarea pachetelor VSP.

Ca orice alt IDE acesta include un editor de cod care acceptă evidențierea sintaxei și finalizarea codului utilizând IntelliSense pentru variabile, funcții, metode, bucle și interogări.

IntelliSense este suportat pentru limbajele incluse precum și pentru XML, foi de stil și Javascript atunci când dezvoltă site-uri web și aplicații web.

Visual Studio include un program de depanare care funcționează atât ca un debugger de nivel de sursă cât și ca un debugger la nivel de mașină. Funcționează atât cu codul administrat cât și cu codul nativ și poate fi folosit pentru depanarea aplicațiilor scrise în orice limbă suportată de Visual Studio.

În plus se poate atașa de asemenea proceselor care rulează, monitorizează și depanează aceste procese. Dacă este disponibil codul sursă pentru procesul de funcționare, acesta afișează codul în timp ce este rulat. Dacă codul sursă nu este disponibil acesta poate afișa dezasamblarea.

Ediția Community a fost anunțată la 12 noiembrie 2014 ca o nouă versiune gratuită, cu funcționalități similar cu Visual Studio Professional. Înainte de această data, singurele ediții gratuite ale Visual Studio erau variantele exprese limitate ale funcțiilor.

Spre deosebire de variantele Express, Community Visual Studio acceptă mai multe limbaje și oferă support pentru extensii. Dezvoltatorii individuali nu au nicio restricție în ceea ce privește utilizarea ediției Community.

3.3 Adobe Photoshop

Adobe Photoshop este un program foarte complex în tot ceea ce înseamna editare foto.Acest program este un produs al firmei americane Adobe Systems și este special adresat profesioniștilor din domeniul fotografiei.

Photoshop a fost creat în 1988 de către Thomas și John Knoll. Acesta a devenit numărul 1 în industria de editare grafică raster.

Poate edita și compune imagini raster în mai multe straturi și suportă măști, compoziții alfa și mai multe modele color inclusiv CMYK, RGB, CIELAB, duotone și spot color. Photoshop are un suport vast pentru formatele de fișiere grafice dar utilizează de asemenea propriile formate de fișiere PSB și PSD care suportă caracteristicile de mai sus.

Față de grafica raster are abilități limitate de-a edita sau de-a face text, grafică vectorială, grafică 3d și video. Setul de caracteristici Photoshop poate fi extins de plug-in-urile Photoshop, programe dezvoltate și distribuite independent de Photoshop care pot rula în interiorul acestuia și oferă funcții noi sau îmbunătățite.

În Photoshop am dezvoltat design-ul masinilor, iconița și câteva imagini din meniul jocului .

Pentru începerea unui proiect nou în Photoshop se deschide meniul File accesând New sau printr-o scurtătură de la tastatura apasând butoanele Ctrl+N.

Fig 1.1 Crearea unui nou proiect în Photoshop

Pasul următor pentru crearea imaginii cu numele jocului de la startul acestuia este adăugarea unui background de culoare neagră. Pentru realizarea acestei operații se alege un nume pentru proiect și se selecteaza culoarea neagră din dreptul butonului Background Contents iar apoi se apasă butonul Ok.

Fig 1.2 Selectarea culorii și dimensiunile imaginii

Pentru crearea imaginii se apasă pe butonul text și apoi se selectează dimensiunea, culoarea și fontul dorit. După ce background-ul a fost creat se exportă fișierul cu extensia dorită de preferabil png sau jpg.

Fig 1.3 Crearea imaginii de la intro-ul jocului

În Photoshop zona de straturi (layer) are o mare importanță deoarece în această zonă sunt afișate toate straturile cu care se lucrează la proiect și se pot aplica acțiuni de manipulare pentru fiecare dintre ele. Fiecare strat este așezat unul deasupra celuilalt iar stratul vizibil se află tot timpul deasupra celorlalte.

Dacă se dorește vizualizarea conținutul unui strat dedesupt se va seta modul invizibil pentru celelalte straturi.În imaginea de mai jos este prezentată zona de lucru cu straturile.

Fig 1.4 Zona de lucru (zona straturilor)

3.4 MonoDevelop

MonoDevelop cunoscut și ca Xamarin Studio este un mediu integrat de dezvoltare open source pentru Linux, MacOS și Windows.

La sfârșitul anului 2003 un grup de dezvoltatori din comunitatea Mono a început să migreze SharpDevelop un IDE de open source din Windows Froms la GNOME toolkit pe linux. Fiind un punct de pornire al SharopDevelop, MonoDevelop diferă arhitectural de cele mai recente versiuni SharpDevelop.

De-a lungul timpului proiectul MonoDevelop a fost absorbit în restul proiectului Mono și din 2016 este întreținut în mod activ de Xamarin și comunitatea Mono.

Începând cu versiunea 4.x, Xamarin a rebrandat MonoDevelop ca Xamarin Studio dar numai pentru versiunea Windows. Începând cu anul 2016 Xamarin Studio rulează și pe MacOS.

Obiectivul său principal este dezvoltarea de proiecte care utilizează cadrele Mono și .NET.

MonoDevelop integrează caracteristici similare cu cele ale NetBeans și Microsoft Visual Studio cum ar fi completarea automată a codului, controlul sursei, interfața grafică (GUI) și designerul web.

O versiune personalizată a produsului MonoDevelop livrată anterior cu versiuni Windows și Mac de Unity.

A permis crearea de script-uri avansate C# care a fost folosit pentru a compila jocuri video de tip cross-platform de compilatorul Unity.

Acesta a fost înlocuit de Visual Studio Community cu excepția versiunilor Linux[8].

MonoDevelop permite dezvoltatorilor să scrie rapid aplicații desktop și web pe Linux, Windows și MacOS.

De asemenea facilitează dezvoltatorii să porteze aplicații .NET create cu Visual Studio pentru Linux și macOS, menținând o bază de cod unică pentru toate platformele[9].

Caracteristici MonoDevelop:

Multi platformă: sprijină Linux, Windows și MacOS

Editare avansată de text: suport pentru completarea codului pentru C#, șabloane de cod, pliere de cod

Bara de lucru configurabilă: afișaje ferestre personalizabile complet, legări taste definite de utilizator, instrumente externe

Alte instrumente: controlul sursei, integrarea makefile, testarea unităților, ambalarea și implementarea, localizarea.

4. Aspecte tehnice legate de implementarea jocului

4.1 Tema aleasă

Realizare unui joc 3D pentru Windows sau Mac cu ajutorul motorului grafic Unity.

Am ales această temă deoarece încă de când eram copil eram pasionat de jocurile cu mașini și acum am avut oportunitatea să realizez unul.

Jocul este conceput în special pentru pasionații de jocuri cu mașini având posibilitatea de-a alege între 3 moduri de joc, 3 tipuri de mașini și 2 nivele diferite.

Modul scor este opțiunea în care trebuie obținut un punctaj cât mai mare din obiectele aflate pe parcursul nivelului.

Modul cursă este asemănător cu alte jocuri cu mașini iar scopul utilizatorului este de-a termina întrecerea înainte oponentului său.

În modul timp utilizatorul trebuie să depășească cel mai bun timp obținut și poate să parcurgă nivelul în mod liber fără anumite restricții.

Accesul la joc se face foarte ușor prin deschiderea executabilului iar meniul este de asemenea unul foarte simplu.

4.2 Schema structurii de proiectare a proiectului

Fig 1.5 Schema de proiectare a aplicației

Structura este realizată începând cu implementarea în mediul de dezvoltare Unity, având un meniu din care se poate alege, start joc, controale, credite, ieșire joc, pe urmă se poate selecta modul de joc, mașina și harta pe care se va desfășura cursa.

Interfața aplicației permite utilizatorului să înceapă jocul și să navigheze prin meniu foarte ușor datorită design-ului foarte simplu.

4.3 Implemenarea grafică

Pentru realizarea acestui proiect am ales ca mediul de dezvoltare să fie Unity deoarece acesta este disponibil gratuit pentru orice persoană indiferent că aceasta dorește să dezvolte o aplicație foarte complexă sau una extrem de simplă.

Unity oferă multe posibilități deoarece este un program foarte complex, pot fi folosite mai multe limbaje de programare și pe deasupra Unity are și un magazin de asset-uri de unde pot fi cumpărate sau pot fi luate pe gratis foarte multe obiecte necesare la crearea jocului cum ar fi:mașini, caractere, obiecte, hărți, muzică, etc.

Fig 1.6 Interfața mediului de dezvoltare Unity

În următoarea figură este prezentată structura fișierelor, codul sursă C# pentru fiecare dintre operațiuni, fișierele audio cât și imaginile necesare la design-ul jocului.

Fig 1.7 Structura proiectului

În figura de mai jos se poate structura obiectelor necesare la crearea jocului pentru partea grafică și de interacțiune.

Fig 1.8 Structura pentru partea grafică

În următoarea figură sunt prezentate obiectele necesare pentru modul scor. Pentru ca mașina să contabilizeze punctele strânse aceasta trebuie sa treacă prin aceste cuburi colorate care sunt legate la codul sursă prin Unity și care fac posibil modul scor.

Fig 1.9 Mod scor implementare

În figura de mai jos apare un obiect cu ajutorul căruia mașina este oprită de-a depăși pista și de-a ajunge în decor.

Pentru a nu fi vizibil în timpul cursei acestui perete i se debifează opțiunea mesh renderer din meniul Unity și așa peretele va deveni invizibil pentru jucător dar mașina îl va recunoaște ca fiind acolo și nu va părasi pista.

Fig 2 Barieră

Mai jos poate fi văzut cum a fost realizată partea de inteligență artificială din acest joc.

Cubul de culoare galbenă din imagine este punctul de referință pentru mașina controlată de calculator, aceste obiecte sunt împrăștiate pe toată harta și cu ajutorul codului sursă mașina le parcurge pe fiecare.

Pentru ca aceste obiecte să nu fie vizibile în joc se va selecta opțiunea mesh renderer și astfel acestea vor fi vizibile doar pentru mașină.

Pentru a fi funcțional obiectului i se adaugă codul sursă și astfel mașina adversă devine activă.

Fig 2.1 Implementare IA

În următoarea imagine este prezentată linia de sosire iar pentru ca mașinile să recunoască acest lucru s-a adăugat acel perete căruia i se adaugă codul în C#. În momentul în care mașinile trec de acel perete acestea recunosc acest lucru și se contabilizează finalul turei.

Acest perete este vizibil doare mașinilor pentru că nu ar fi estetic să apară în timpul jocului și pentru a fi invizibil jucătorului se debifează căsuța mesh renderer.

Fig 2.2 Linie sosire

4.4 Secvențe din codul sursă

void OnTriggerEnter()

{

if (ModTimp.ModTimpActiv == true)

{

//mod cursa activ

}

else

{

this.GetComponent<BoxCollider>().enabled = false;

MasinaMea.SetActive(false);

FinalJoc.SetActive(false);

CarController.m_Topspeed = 0.0f;

MasinaMea.GetComponent<CarController>().enabled = false;

MasinaMea.GetComponent<CarUserControl>().enabled = false;

MasinaMea.SetActive(true);

CameraFinal.SetActive(true);

NivelMuzica.SetActive(false);

ModCamera.SetActive(false);

MuzicaFinal.Play();

ManagerRon.TotalBani += 100;

PlayerPrefs.SetInt("BaniSalvati", ManagerRon.TotalBani);

}

În această secvență de cod sunt dezavtivate cele 2 mașini a utilizatorului și a calculatorului pentru ca după terminarea cursei cele 2 mașini să nu își continue deplasarea și să înceapă muzica de final.

Pe deasupra aici se activează camera de la finalul cursei și se salvează punctele adunate pe parcursul cursei.

public class JumatateCursa : MonoBehaviour

{

public GameObject CursaCompleta;

public GameObject CursaJumatate;

void OnTriggerEnter()

{

CursaCompleta.SetActive(true);

CursaJumatate.SetActive(false);

}

}

Această parte din cod se referă la momentul în care mașina trece de jumătatea cursei în acel moment se dezactivează clasa JumatateCursa și se activează FinalTură deoarece mașina trebuie să recunoască momentul în care trece linia de final pentru a se putea contabiliza tura respectivă.

void OnTriggerExit(Collider other)

{

if (other.tag == "PositieMasina")

{

AfisarePozitie.GetComponent<Text>().text = "Locul 1";

}

}

În această secvență este creată opțiunea care arată pe parcursul cursei care dintre cei 2 concurenți se află pe locul 1 respectiv locul 2.

void Start()

{

GalbenSelectat = PlayerPrefs.GetInt("GalbenCumparata");

if (GalbenSelectat == 100)

{

GalbenFals.SetActive(false);

}

}

Dacă utilizatorul jocului are 100 de puncte acumulate în joc atunci acesta va putea debloca mașina galbenă iar în codul de mai sus apare faptul că în momentul în care jucătorul are 100 de puncte și selectează mașina aceasta se deblochează și trece în modul deblocat.

void Update()

{

if (UrmPunct == 0)

{

PunctIa.transform.position = Punct01.transform.position;

}

IEnumerator OnTriggerEnter(Collider collision)

{

if (collision.gameObject.tag == "MasinaIa01")

{

this.GetComponent<BoxCollider>().enabled = false;

UrmPunct += 1;

if (UrmPunct == 8)

{

UrmPunct = 0;

}

yield return new WaitForSeconds(1);

this.GetComponent<BoxCollider>().enabled = true;

}

}

Această parte din cod realizează partea de inteligență artificială a acestui joc.

Pentru partea de inteligență artificială au fost create mai multe obiecte în Unity care interacționează cu codul sursă scris în C#. După ce mașina controlată de calculator trece printr-un obiect acesta se dezactivează timp de o secundă și mașina se îndreptă către următorul.

După ce mașina ajunge la ultimul punct înainte de linia de sosire aceasta o începe din nou de la primul obiect și continuă pe aceeași rută ca înainte.

void Update()

{

MasinaX = PrimaMasina.transform.eulerAngles.x;

MasinaY = PrimaMasina.transform.eulerAngles.y;

MasinaZ = PrimaMasina.transform.eulerAngles.z;

transform.eulerAngles = new Vector3(MasinaX – MasinaX, MasinaY, MasinaZ – MasinaZ);

}

Deoarece camera jucătorului principal nu rămâne fixă în momentele de coliziune a fost nevoie de fixarea acesteia.

În secvența de mai sus este realizată o fixare a camerei pe mașină pentru ca aceasta să fie tot timpul echilibrată și să nu aibe fluctuații.

IEnumerator ModeChange()

{

yield return new WaitForSeconds(0.01f);

if (ModCamera == 0)

{

CameraNormala.SetActive(true);

CameraFP.SetActive(false);

}

if (ModCamera == 1)

{

CameraDistanta.SetActive(true);

CameraNormala.SetActive(false);

}

if (ModCamera == 2)

{

CameraFP.SetActive(true);

CameraDistanta.SetActive(false);

}

Această secvență face trecerea de la un mod al camerei la altul. Jocul are 3 moduri ale camerei în care poate fi jucat.

Primul mod este cel normal, al doilea în care camera se află la distanța de mașină și cel de-al treilea mod este când camera se află întru-un mod first person.

La apăsarea tastei c cele trei moduri ale camerei se schimbă, de exemplu dacă suntem în modul normal la apăsarea tastei c acest mod va fi dezactivat și se va activa modul first person.

5. Utilizarea aplicației

5.1 Modul de utilizare

În interfața care este prezentată în imaginea de mai jos utilizatorul poate alege rezoluția ecranului, calitatea graficii,modul pe tot ecranul sau minimizat precum și selectarea monitorului în cazul în care sunt mai multe monitoare.

Pornirea jocului se face foarte simplu prin apăsarea butonului play din executabil sau din motorul grafic Unity.

Fig 2.3 Opțiuni grafice și pornire joc

5.2 Meniul principal

În această figură este prezentat meniul principal al jocului cu cele 4 opțiuni: joacă, controale, credite și ieșire.

Background-ul este un asset care se găsește în magazinul virtual al celor de la Unity. În stânga imaginii sunt afășate punctele utilizatorului.

Apăsarea butonului joacă duce la meniul de selectare al modului, mașinii și al pistei pe care se va desfașura cursa.

Butonul controale afișează comenzile care sunt folosite în joc iar butonul credite arată niște informații despre creatorul aplicației.

Fig 2.4 Meniul principal al jocului

În figura 2.1 se găsește conținutul butonului credite precum și un buton „Meniu” care duce înapoi către meniul principal.

Fig 2.5 Credite

În următoare figură apar controalele care sunt folosite în joc, background-ul care este un asset gratuit din magazinul virtual Unity și butonul „Meniu” care duce către meniul principal al aplicației.

Fig 2.6 Controale

5.3 Meniu selectare

În figura 2.3 se poate observa meniul de selectare cu toate opțiunile sale. În stânga imaginii sunt afișate punctele jucătorului.

Pentru începerea jocului trebuie selectat una dintre cele 3 mașini de culori diferite apoi modul de joc dorit și după aceea unul dintre cele 2 nivele existente.

În stânga jos este un buton care prin apăsarea lui jocul se întoarce la meniul principal.

Fig 2.7 Meniu selectare

5.4 Mod Scor

În figura de mai jos este prezentat modul scor al acestui joc 3D. În imagine se poate observa mini harta, scorul, numărul rundei precum și obiectele care trebuie colectate.

În acest mod jucătorul trebuie să culeagă cât mai multe puncte posibile prin colectarea lor fiecare dintre obiecte conține un număr diferit de puncte.

După terminarea cursei punctele colectate vor fi afișate în meniul principal al jocului cât și în meniul de selectare.

Fig 2.8 Modul Scor

5.5 Mod Timp

Mai jos în figura 2.5 se află modul timp în care jucătorul este liber să conducă fără anumite restricții din partea jocului și poate să bată cel mai bun record obținut înainte.

Fig 2.9 Modul timp

5.6 Mod cursă

În figura 2.6 este prezentat ultimul mod și anume modul cursă în care este afișat poziția pe care se află jucătorul.

Scopul acestui mod de joc este acela de-a termina primul cursa și de-a scoate un timp cât mai bun posibil.

La terminarea acestei curse în condițiile în care jucătorul termină pe prima poziție acesta va primi 100 de puncte bonus care vor fi afișate în meniul principal și în cel de selectare.

Fig 3 Modul cursă

În următoarea figură este prezentată a doua hartă a jocului care conține la fel ca și cealaltă toate cele 3 moduri de joc cât și cele 3 mașini.

Fig 3.1 Nivel 2

5.7 Mod cameră

Mai jos se găsește figura 2.8 în care sunt prezentate cele 3 moduri de vizualizare ale camerei.

Prin apăsarea tastei C de la tastatură se poate schimba modul de vizualizare al camerei în cel pe care utilizatorul îl preferă cel mai mult.

Fig 3.2 Mod cameră

În figura de mai jos este afișat meniul de pauză al jocului care este unul foarte simplu și ușor de utilizat.

Butonul „Continuă” permite jucătorului să continue jocul de la momentul în care a rămas, butonul „Meniu” duce utilizatorul către meniul principal al jocului iar butonul „Ieșire Joc” închide aplicația de tot.

Figura 3.3 Meniu pauză

6. Concluzii

În ultimul timp de când jocurile video au avut o dezvoltare atât de mare Unity a început să producă cât mai multe jocuri atât tridimensionale cât și bidimensionale.

Am ales să creez un joc în Unity deoarece de când eram copil eram pasionat de jocurile pe calculator și mai ales de cele cu mașini iar cu acest proiect am avut ocazia să creez propriul joc de acest gen.

Lucrând la această aplicație am învățat să folosesc mult mai bine unele programe cum ar fi Unity și Visual Studio.

Acest proiect m-a ajutat să descopăr acest motor grafic Unity și pe viitor este posibil să mai creez jocuri în acest program.

6.1 Îmbunătățiri ulterioare ale aplicației

O prima îmbunătățire ar fi adăugarea mai multor adversari în joc și a mai multor nivele pentru ca acesta să fie mai competitiv.

O altă îmbunătățire poate să fie adăugarea modului multiplayer ca să poată fi jucat împreună cu un prieten sau împotriva altor jucători în modul online.

Modificarea mașinilor într-un design mai profesionist ar putea fi o îmbunătățire majoră deoarece deocamdată mașinile existente în joc sunt niște asset-uri de la Unity și nu au un aspect prea atrăgător însă niște mașini personalizate ar putea să atragă mai mulți jucători.

Bibliografie

[1] https://en.wikipedia.org/wiki/Unity_(game_engine)

[2] https://en.wikipedia.org/wiki/C_Sharp_(programming_language)

[3] https://docs.microsoft.com/en-us/dotnet/csharp/getting-started/introduction-to-the-csharp-language-and-the-net-framework

[4]https://medium.com/sololearn/why-is-c-among-the-most-popular-programming-languages-in-the-world-ccf26824ffcb

[5] https://en.wikipedia.org/wiki/Microsoft_Visual_Studio

[6] https://en.wikipedia.org/wiki/Microsoft_Visual_Studio_Express

[7] https://www.techopedia.com/definition/15740/visual-studio-net

[8] https://en.wikipedia.org/wiki/MonoDevelop

[9] https://www.monodevelop.com/

[10]https://docs.unity3d.com/Manual/AssetStore.html?_ga=2.226173338.1629611954.1535480783-1943942201.1533811810

Similar Posts

  • Domeniul de cercetare: [608935]

    UNIVERSITATEA „OVIDIUS” CONSTANȚA FACULTATEA DE TEOLOGIE ORTODOXĂ Domeniul de cercetare: TEOLOGIE Disciplina: MISIOLOGIE ȘI ECUMENISM CONSTITUȚIA TEANDRICĂ ȘI MISIONARĂ A BISERICII. O PERSPECTIVĂ CONTEMPORANĂ ASUPRA MISIUNII – Rezumat la teza de doct orat – Susținut ă de Arhid. Nifon – Nicolae Motogna la disciplina Misiologie și Ecumenism Sub îndrumarea științifică a Pr. Prof. Univ. Dr….

  • Complicația a fost definită ca fiind o evoluție nefavorabilă sau consecință a [617077]

    Complicația a fost definită ca fiind o evoluție nefavorabilă sau consecință a unei boli, stări de sănătate sau a unei terapii. Deși complicațiile pot indica ca etapele unui tratament protetic, fie ele clinice sau tehnice, au fost un eșec sau efectuate substandard de multe ori nu reflectă realitatea. De cele mai multe ori acestea apar…

  • Ceausu Delia Final 2017 Corr [614079]

    Particularitățiile comunicării de marketing în promovarea serviciilor integrate DDD – Studiu de caz S.C. Orabih Ambient S.R.L. 1 LUCRARE DE LICENȚĂ COORDONATOR ȘTIINȚIFIC: Lect. univ. dr. ec. DAVID Katalin Gabriela ABSOLVENT: [anonimizat]2017 – UNIVERSITATEA DE VEST „VASILE GOLDIȘ” DIN ARAD FACULTATEA DE ȘTIINȚE ECONOMICE, INFORMATICĂ ȘI INGINERIE SPECIALIZAREA: MARKETING Particularitățiile comunicării de marketing în promovarea…

  • … … … … … 1 [608241]

    CUPRINS ………………………….. ………………………….. ………………………….. ………………………….. …….. 1 ………………………….. …………….. 2 ………………………….. ………………………….. ………………………….. ……………. 2 ………………………….. ………………………….. ………………………….. ….. 3 ………………………….. ………………………….. ………………………….. ………. 10 ………………………….. ….14 ………………………….. ………………………….. ………………………… 14 ………………………….. ………………………….. ………………………….. ………………….. 18 ………………………….. ………………………….. ………………………….. ………….. 20 ………………………….. ………………………….. ………………………… 20 ………………………….. ………………………….. …………………… 23 ………………………….. ………………………….. ………………………….. .43 1 2…

  • Preparate farmaceutice topice [632053]

    Preparate farmaceutice topice MARIN VALENTINA -GEORGIANA __________________ _indicate în dermatita seboreică 1 СUPRINS Intrоduсеrе………………………………………………………………………………………………………… PАRTЕА GЕNЕRАLĂ Саpitоlul 1. Аnаtоmiа piеlii……………………………………………………………… …………… 1.1. Dеfiniții………………………………………………………………………………………………………. 1.2. Аnеxеlе piеlii…………………………………………………………………………………….. ……….. 1.3. Pеnеtrаrеа prin pi еlе……………………………………………………………………………………… 1.3.1. P еnеtrаrеа mеdiсаmеntоаsă. Соndiții…………………………………………… Саpitоlul 2. Аfесțiunilе piе lii………………………………………………….. …………………… 2.1. D еfiniții………………………………………………………………………………………………………. 2.2. Сlаsifiсаrеа аfеțiunilо r dеrmiсе ……………………………………….. ……………………………….. 2.3. Trаtаmеnt…