Sunteți pe pagina 1din 43

CREAREA UNUI JOC 3D

Home

20 MAI 2015

Universitatea Petrol-Gaze
Cuprins
Introducere ................................................................................................................................................... 2
Software folosit ............................................................................................................................................. 2
Adăugarea componentelor ........................................................................................................................... 3
Scriptare ........................................................................................................................................................ 4
Realizarea Aplicației ...................................................................................................................................... 6
1.Crearea mediului de desfășurare a jocului ............................................................................................ 6
2.Model ce reprezintă jucătorul ............................................................................................................. 10
3.Poziția camerei..................................................................................................................................... 15
4. Adăugarea inamicului ......................................................................................................................... 17
5. Elemente UI (User Interface) și HUD (Heads-up Display) ................................................................... 23
6.Viața jucătorului ................................................................................................................................... 28
7.Rănirea inamicilor ................................................................................................................................ 29
8.Sistem de recompensare ..................................................................................................................... 32
9.Respawn-ul inamicilor.......................................................................................................................... 34
10. Starea finală ...................................................................................................................................... 37
Concluzii ...................................................................................................................................................... 41
Bibliografie .................................................................................................................................................. 42
Introducere

Tema proiectului este crearea unui joc 3D,cu ajutorul unui motor grafic.
Jocul video este o activitate recreatională care implică unul sau mai mulți
jucători,definit printr-un scop pe care jucătorii încearcă să îl atingă și un set de
reguli ce determină acțiunile posibile ale jucătorilor.Încă de la apariția jocurilor
arcade,la începutul anilor `70,piața jocurilor video este într-o continuă creștere,
pentru anul 2015 fiind estimată la 82 miliarde dolari.
Jocul creat de mine este un joc de tip shooter,controlat de un singur
jucător,ce are ca scop supraviețuirea și distrugerea valurilor de inamici,pentru
obținerea unui punctaj cât mai mare.
O ordine a dezvoltării jocului este:
 Crearea mediului de desfășurare a jocului;
 Model ce reprezintă jucătorul;
 Poziția camerei;
 Adăugarea inamicului;
 Elemente UI (User Interface) si HUD (Heads-up Display);
 Viața jucătorului;
 Rănirea inamicilor;
 Sistem de recompensare;
 Respawn-ul inamicilor;
 Sfârsitul jocului;

Software folosit

Unity este un motor grafic creat de Unity Technologies și folosit pentru


dezvoltarea jocurilor video pentru calculator,console,telefoane mobile si website-
uri.Bazat pe portabilitate,motorul se axează pe următoarele interfețe de
programare ale aplicațiilor:Direct3D pentru Windows si Xbox 360,OpenGL pentru
Mac,Windows și Linux si OpenGL ES pentru Android si iOs.Unity permite
specificații pentru compresia texturii și setările rezoluției pentru fiecare platformă
pe care jocul o suportă.
Scriptarea pentru acest motor grafic se face în Mono,implementarea open-source
a lui .NET Framework. Programatorii pot folosii UnityScript(un limbaj custom,
numit JavaScript de software), C#, sau Boo(are sintaxa inspirată din limbajul
Python).
 Crearea Scenei – File> New Scene
O scenă este formată din obiectele jocului.Ele sunt folosite pentru crearea unui
meniu,nivele individuale ale jocului și altele.În fiecare scenă,putem plasa mediul
jocului,obstacole și decorațiuni,în esență construim jocul pe bucăti.
 Obiecte (GameObject)
Obiectele au nevoie de proprietăți speciale înainte să reprezinte un caracter,un
mediu sau un efect special.Obiectele sunt alcătuite din o multime de piese numite
componente.În funcție de obiectul pe care vrei să îl creezi,poți adăuga diferite
combinații de componente.Crearea unui obiect nou se face prin combinația de
taste Shift-Control-N pe sistemul de operare Windows.

Adăugarea componentelor

Componentele obiectului se pot adăuga din meniul Components.


Valorile sau proprietățile componentelor pot fi modificate din editor sau prin
scripturi.

Scriptare

Scriptarea este un ingredient esențial țn toate jocurile.Chiar și cele mai simple


jocuri au nevoie de scripturi pentru a putea răspunde la acțiunile date de jucător.
Dincolo de asta,scripturile pot fi folosite pentru a crea efecte grafice,pentru a
controla comportamentul fizic al obiectelor sau pentru implementarea unei
inteligențe artificiale pentru caracterele din joc.
Există 2 limbaje de programare suportate de Unity:
- C#(C-sharp), limbaj similar cu Java sau C++;
- UniyScript, limbaj creat special pentru Unity si modelat după
JavaScript;
Scripturile pot fi create direct din Unity prin selecția Assets > Create > C# Script (or
JavaScript) din meniu.
La deschiderea scripturilor,Unity folosește automat MonoDevelop.
Script Unity:

Script C#:
Aplicațiile în Unity pot fi create specific pentru anumite platforme cum ar fi iOS,
Android, Windows, Web Player, WebGL și altele.

Realizarea Aplicației
1.Crearea mediului de desfășurare a jocului
Crearea unei scene:

Construirea mediului în care se desfășoară jocul:


Toate elementele mediului sunt reprezentate prin obiectul Environment.Acesta se
adaugă în scenă prin adăugarea lui în ierarhie.

Luminarea mediului se face prin obiectul Lights.


Pentru că obiectele mediului nu sunt la același nivel,adăugăm un obiect nou care
să reprezinte podeaua:
GameObject > 3D Object > Quad și îl redenumim Floor.

Pentru al face invizibil,ștergem componenta Mesh Renderer a obiectului.


Podeaua este element de referință pentru cameră.
De aceea trebuie să setăm obiectul ce reprezintă podeaua,pe layerul Floor.

Adaugăm o muzica pe fundalul jocului,prin crearea unui nou obiect:


GameObject > Create Empty și îl redenumim BackgroudMusic.
Adaugăm o componentă audio obiectului:
Add Component > Audio > Audio Source
Adăugam fișierul Backgroud Music din resurse si bifăm opțiunea Loop pentru a
derula sunetul pe tot parcursul jocului.
2.Model ce reprezintă jucătorul
Adăugăm în scenă obiectul ce reprezintă avatarul jucătorului :
Creăm o animație pentru model:
Create > Animation Controller și o numim PlayerAC

Creăm stările în care se poate afla playerul,tranzițiile dintre ele și condițiile ca


acestea să se petreacă:
Adăugăm modelului câteva componente:
 Add Component > Physics > Rigidbody ,pentru a adaugă proprietăți fizice
obiectului;
 Add Component > Physics > Capsule Collider,pentru ca obiectul să se
lovească de elementele mediului;
 Add Component > Audio > Audio Source,când playerul pierde viață,să ruleze
un fișier audio;
 Add Component > New Script;
Crearea scriptului pentru mișcarea jucătorului:
Adăugarea variabilelor:

Funcție pentru inițializare:


Funcție pentru actualizarea elementelor fizice și apelarea funcțiilor ce urmează:

Funcție pentru mișcare:

Funcție de rotire a caracterului în funcție de cameră:

Funcție de animare:
3.Poziția camerei

Momentan,poziția camerei în scenă nu este setată.

Pentru a îi da jocului o vedere izometrică trebuie să mutăm poziția camerei:


Selectăm Main Camera în ierarhie,mutăm poziția (Transform Position) la
coordonatele (1,15,-22),rotația (Transform Rotation) la coordonatele (30,0,0),
proiectarea (Projection) pe Orthographic,mărimea (Size) 4.5.
Pentru a putea urmării playerul,camera trebuie să aibă un script.
Create > C# Script se adaugă peste Main Camera în ierarhie.
Se selectează playerul drept ținta pentru camera:

4. Adăugarea inamicului
Se adaugă în ierarhie obiectul ce reprezintă un inamic,din lista de resurse.
Se adaugă acestui model un obiect numit HitParticles,ce rulează o mica animație
țn jurul inamicului atunci când este impușcat.
Pentru ca jocul să iși dea seama că inamicul poate fi rănit,setăm layerul obiectului
pe Shootable.
Adăugăm obiectului Zombunny componentele:
 Add Component > Physics > RigidBody,pentru a adăuga propriețăti fizice
obiectului;
 Add Component > Physics > Capsule Collider,pentru ca obiectul să se
loveasca de elementele mediului;
 Add Component > Physics > Sphere Collider,pentru ca inamicul să știe unde
este playerul;
 Add Component > Audio > Audio Source,pentru a scoate un sunet când este
rănit;
 Add Component > Navigation > Nav Mesh Agent,pentru ca inamicul să
urmarească playerul;
Pentru ca modele să cunoască pe unde se pot mișca în mediul jocului:
Window > Navigation, Bake
Creăm o animație pentru modelul inamic:
Create > Animator Controller, numită EnemyAC;
Creăm stările în care se poate afla inamicul, tranzițiile dintre ele și condițiile ca
acestea să se petreacă:
Pentru ca inamicul să se poată mișca,adăugăm un script obiectului:

5. Elemente UI (User Interface) și HUD (Heads-up Display)

Pentru a adăuga elemente pe ecran vom crea un obiect nou (HUDCanvas):


GameObject > UI > Canvas,crează o formă rectangulară 2D
Creăm un obiect copil al obiectului HUDCanvas pentru a arăta pe ecran viața
playerului pe parcursul jocului.
HUDCanvas > Create Empty, numit HealthUI
Selectăm unde vrem să se afle bara de viața pe ecran (am ales în stânga jos):
Creăm un obiect copil pentru obiectul HealthUI,pentru a adăuga imagini:
HealthUI > UI > Image,denumit Heart;
Selectăm imaginea sursă din resurse.
Creăm un obiect copil pentru obiectul HealthUI,pentru a adăuga un slider ce
corespunde barei de viață:
HealthUI > UI > Slider,numit HealthSlider;
Atribuim barei de viață valoarea 100 din componenta Slider a obiectului.
Creăm un obiect copil pentru obiectul HealthUI,pentru a adăuga o nouă imagine:
HealthUI > UI > Image,numit DamageImage;
Acesta are scopul de a colora imaginea pentru o perioadă scurtă de timp atunci
când playerul este rănit.
6.Viața jucătorului

Adăugăm obiectului ce reprezintă caracterul jucătorului scriptul ce controlează


bara de viață.Scriptul modifică valorile atribuite barei de viață,arată imaginea
DamageImage de fiecare dată când jucătorul este rănit iar când bara de viață se
golește,rulează o animație corespunzătoare morții jucătorului.

Adăugăm obiectului ce reprezintă inamicul,scriptul ce permite inamicilor să atace


și să scadă bara de viață.
7.Rănirea inamicilor

Adaugăm obiectului ce reprezintă inamicul un script ce controlează viața și


rulează o animație când viața ajunge la 0.

Pentru adăugarea unor efecte atunci când jucatorul folosește arma:


În obiectul GunParticles,fiu al obiectului Player,adăugăm componentele:
- Componenta ce simulează particulele;
- Add Component > Effects > Line Renderer,ce simulează traiectoria
glontului;
- Add Component > Rendering > Light,ce simulează flashul făcut de
armă;

- Add Component > Audio > Audio Source,sunetul făcut de armă;


- Componenta Script în care sunt declarate variabilele pentru:distanța
până unde se trage,timpul dintre gloanțe și damage ;

8.Sistem de recompensare

Creăm un obiect copil pentru obiectul HUDCanvas,pentru a adăuga text:


HUDCanvas > UI > Text,numit ScoreText pentru afișarea scorului;
Adăugam o componentă Script,care inițializează scorul cu 0 și îl mărește cu o
valoare atribuită inamicilor.

9.Respawn-ul inamicilor

Pentru apariția continuă a inamicilor,creăm un nou obiect.


GameObject > Create Empty,numit EnemyManager;
Adăugăm o componentă Script,ce controlează spawn-ul inamicilor.

Pentru specificarea locului de spawn al inamicilor,creăm noi obiecte în ierarhie.


Fiecare inamic are o perioadă proprie de respawn și un punct propriu de respawn.
Pentru a specifica asta,adăugam în obiectul EnemyManager câte o componentă
Script pentru fiecare inamic.
10. Starea finală
Starea finală a jocului este dată de moartea caracterului.Când se intamplă asta,
vrem ca jocul să se oprească,imaginea jocului să dispară și un nou ecran cu scorul
să apară.
Pentru asta avem nevoie de alte obiecte fiu ale obiectului HUDCanvas:
HUDCanvas > UI > Image,numit ScreenFader ce cuprinde toată imaginea scenei și
este de culoare albastră;
HUDCanvas > UI > Text,numit GameOverText
Pentru ca toate acele acțiuni să se petreacă la sfarsitul jocului,avem nevoie de o
animație.
Window > Animation > Add Curve;

Adăugăm componentele pe care vrem să le animăm;


Pentru ca animația să pornească dupa ce caracterul jucătorului a murit și nu
înainte,creăm o nouă stare și o condiție de tranziție.

Adaugăm componenta Script obiectului HUDCanvas.Scriptul GameOverManager


pornește animația dacă viața jucătorului este 0 și restartează nivelul după un timp
dat.
Salvăm scena și rulăm proiectul.

Concluzii
Unity este o platformă flexibilă și puternică în dezvoltarea jocurilor 2D
și 3D.
Aplicația este un punct bun de pornire pentru realizarea unui joc mai
complex din punct de vedere al acțiunilor,gradului de dificultate și al
nivelelor.
Avantajele folosirii Unity :
- Platforma poate fi descarcată și utilizată gratis;
- Poate fi utilizată de începători;
- Unity pune la dispoziție pachete de resurse;
- Crează aplicații portabile pe o multime de platforme;
Dezavantaje folosirii Unity:
- Nu există template-uri,fiecare proiect trebuie început de la 0 dacă nu
ai resursele necesare;
- Din punct de vedere grafic,Unity este mai slab decât UDK (Unreal
Development Kit);

Bibliografie

1.http://docs.unity3d.com/Manual/index.html
2. https://unity3d.com/learn/tutorials/modules

S-ar putea să vă placă și