• Rezultati Niso Bili Najdeni

PROGRAMIRANJE IZOBRAŽEVALNIH IGER V PROGRAMU UNITY

N/A
N/A
Protected

Academic year: 2022

Share "PROGRAMIRANJE IZOBRAŽEVALNIH IGER V PROGRAMU UNITY"

Copied!
42
0
0

Celotno besedilo

(1)

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA

DOMEN BRGLEZ

PROGRAMIRANJE IZOBRAŽEVALNIH IGER V PROGRAMU UNITY

DIPLOMSKO DELO

Ljubljana, 2017

(2)
(3)

UNIVERZA V LJUBLJANI PEDAGOŠKA FAKULTETA

DVOPREDMETNI UČITELJ

DOMEN BRGLEZ

Mentor: izr. prof. dr. JOŽE RUGELJ Somentor: asist. MATEJ ZAPUŠEK

PROGRAMIRANJE IZOBRAŽEVALNIH IGER V PROGRAMU UNITY

DIPLOMSKO DELO

Ljubljana, 2017

(4)
(5)

Zahvaljujem se mentorju izr. prof. Jožetu Ruglju, da me je sprejel pod svoje mentorstvo.

Iskerna zahvala tudi prof. Mateju Zapušku, za vse napotke, popravke, pomoč in potrpe- žljivost ter spodbudne besede pri pisanju diplome.

Zahvaljujem se tudi vsem, ki so mi v času študija stali ob strani in verjeli vame.

(6)
(7)

POVZETEK

Pri poučevanju nas vedno zanima, kako izboljšati učenje s pomočjo novih učnih metod, ki bi olajšale razumevanje, povečale motivacijo in imele za rezultat poglobljeno znanje. Ena izmed inovativnih metod je poučevanje s pomočjo izobraževalnih računalniških iger.

Igre uporabljamo pri poučevanju v situacijah, kjer bi lahko z njimi bolje razložili učno snov, ponudimo učencem varno okolje za eksperimentiranje, simuliramo realne situacije... Prav zato pa je uporaba dobrega okolja za izdelavo igre nujna, saj nam celoten postopek izdelave igre zelo olajša.

Eden izmed teh programov je Unity, katerega sem se odločil opisati v diplomski nalogi.

Z njim lahko naredimo 2D in 3D igre, sami napišemo programsko kodo, igro pa izvozimo v katerikoli sodobni format.

Ker sem se že prej srečal s programom za izdelavo iger (eAdventure), sem najprej program Unity primerjal z njim, nato pa vse stvari, ki se dajo izdelati v njem opisal, kako se naredijo v Unity ter dodal še več uporabnih stvari za izdelavo kvalitetnejše igre. Unity ima možnost programiranja kode in skript, zato sem še prej izluščil bistvene stvari programskega jezika C#, ter nekaj njegovih sintaktičnih značilnosti.

Končna diplomska naloga se izkaže kot nekakšen vodič (guide) za vse, ki si želijo ustvar- jati (izobraževalne) računalniške igre in so se prvič srečali s programom Unity.

Ključne besede: eAdventure, Unity, računalniške igre, izobraževalne igre, C#

(8)
(9)

ABSTRACT

We are always trying to improve learning process by finding new ways to increase motivation, make things easier to understand and last but not least to get better learning results. One method to do that is by creating educational video games.

Video games are used in situations that can explain certain situations better, where we can make safe environment for students to experiment new things, to simulate real life si- tuations and last but not least to increase their motivation in learning process. That is the main reason to use a good program when creating video games.

One of these programs is Unity, which is described in this diploma. 2D and 3D games can be created in Unity, we can write our own scripts and do the programming. Games can be exported to every nowadays platform.

In the beginning I made a comparison to a known program which I used before called eAd- venture. Then all the things that can be made in eAdventure are made in Unity with specific upgrades. Because of programming function in Unity I made some basic description of C#

programming language and some specific syntax.

Diploma in general turned out to be sort of a guide for all of those who want to create (educational) video games but they never worked with Unity.

Key words: eAdventure, Unity, video games, educational games, C#

(10)
(11)

Kazalo

1 Program eAdventure 1

1.1 O programu . . . 1

1.2 Stvari, ki jih ponuja . . . 1

1.3 Slabosti . . . 3

2 Programski jezik C# 4 2.1 Predstavitev jezika . . . 4

2.2 Predstavitev osnovnih stvari . . . 4

2.2.1 Vrednostne spremelnjivke . . . 5

2.2.2 Nizi (String) . . . 5

2.2.3 Definiranje in incializiranje spremenljivk . . . 5

2.2.4 Operatorji . . . 5

2.2.5 Pogojni stavki in zanke . . . 6

2.3 Povezava v Unity . . . 7

3 Uvod v Unity 8 3.1 Uvod . . . 8

3.2 Razlaga nekaterih pojmov . . . 8

3.2.1 Nadzorovanje dela . . . 8

3.2.2 Uporaba Namespace-ov . . . . 9

3.2.3 Komponente objekta . . . 9

3.2.4 Metoda Start() . . . 9

3.2.5 Metoda Update() . . . 10

3.2.6 Metoda FixedUpdate() . . . 10

3.2.7 Metoda LateUpdate() . . . 10

3.3 Ena ideja organizacije okolja . . . 10

3.4 Dodajanje zvoka . . . 12

3.5 Igralec (Player) . . . 12

3.6 Animacija . . . 14

(12)

3.7 Trkalniki (Colliders) . . . 15

3.7.1 Box Collider 2D . . . 16

3.7.2 Circle Collider 2D . . . 16

3.7.3 Edge Collider 2D . . . 17

3.7.4 Polygon Collider 2D . . . 17

3.7.5 Capsule Collider 2D . . . 17

3.8 Drag&drop . . . 18

3.9 Premikanje igralca . . . 20

3.9.1 Premikanje z miško . . . 20

3.9.2 Premikanje s tipkovnico . . . 21

3.10 Prehod med scenami . . . 22

3.10.1 Prehod s pomočjo gumba . . . 22

3.10.2 Prehajanje med scenami ob dotiku oz. trku . . . 23

3.11 Kamera sledi igralcu . . . 24

3.12 Projekt do .exe datoteke . . . 24

4 Seznam priloženih skript 26

5 Viri 27

(13)
(14)

Slike

1 Sintaksa if stavka. . . 6

2 Sintaksa if-else stavka. . . 6

3 Sintaksa while in for zanke. . . 7

4 Zaslon po privzetih nastavitvah. . . 10

5 Subjektivna organizacija oken. . . 12

6 Primer Sprite Sheet-a. . . 13

7 Primer grafa v Animator-ju. . . 15

8 Oblika Box Collider-ja. . . 16

9 Oblika Circle Collider-ja. . . 16

10 Oblika Edge Collider-ja. . . 17

11 Oblika Polygon Collider-ja. . . . 17

12 Oblika Capsule Collider-ja. . . . 18

13 Okno Build Settings. . . . 25

(15)
(16)

1 Program eAdventure

1.1 O programu

EAdventure je program razvit v okviru e-UCM raziskovalnega projekta. Program dostopen na naslovu http://e-adventure.e-ucm.es/.

Namenjen je ustvarjanju izobraževalnih iger. Žanr iger, ki se jih da ustvarjati je omejen na pustolovske igre (adventure games). Igre se ustvarja v 2D formatu in sicer lahko izbiramo med prvoosebnim načinom ali tretjeosebnim načinom (1st person, 3rd person).

Dobra stran je ta, da je na voljo za najbolj razširjene operacijske sisteme: Windows, Mac OS in Linux. Ustvarjanje iger s tem programom ne zahteva nobenega znanja programiranja, nobenega znanja programskega jezika, le malce logičnega povezovanja in razmišljanja. To velja za del ustvarjanja igre, kjer se srečamo z omejitvenimi pogoji oz. pogoji, kdaj je nekaj vidno/nevidno. Več o tem bo opisano v nadaljevanju.

1.2 Stvari, ki jih ponuja

Glavne stvari, ki so pomembne za ustvarjanje igre so opisane v nadaljevanju, opis ostalih pa se najde v njihovi dokumentaciji (dostopno na: http://e-adventure.e-ucm.es/tutorial/).

Chapters so poglavja, ker celotno igro razdelimo na več manjših poglavij. Vsako poglavje si lahko predstavljamo kot mini igro, ki jo posebej izdelujemo in na koncu povežemo v prvotno, celotno igro.

Scenes, Cut-Scenes so scene, del igre, kjer se ta odvija, poteka interakcija med igralcem in okoljem, med seboj pa jih povežemo z uporabo izhodov (Exits). Animacija se lahko vstavi kot video animacijo ali kot zaporedje slik, ki jih prikazuje v določenem časovnem razmiku.

Glede na to, da v igri ponavadi pričakujemo tudi glasbo, je vredno omeniti, da eAdventure sprejema zvočne zapise oblike .mp3.

Predmete (Items) lahko dodajamo kot sliko in ji odstranimo ozadje, drugače povedano, lahko ozadje slike naredimo nevidno oz. prozorno.

Stvarem lahko dodajamo akcije oz. interakcije na uporabnikovo zahtevo. Te akcije so:

Examine (preglej),Grab (primi),Use (uporabi),Drag to (povleci (do)) in druge.

1

(17)

Slednja med temi akcijami je zelo uporabna pri ustvarjanju izobraževalnih iger, ker nam pomaga ustvariti metodo drag&drop.

Characters je poimenovanje za karakterje, s katereimi lahko igralec govori s pomočjo dolo- čenega principa, ki bo podan v nadaljevanju tega razdelka. V angleščini so znani bolj pod kratico NPC (Non Player Characters), torej "neigralski karakterji". Dodaja se jim lahko animacije, drugega pa se z njimi ne da početi. So le nekakšen dodatek za usmerjanje igre in interakcije z igralcem.

Pogovori (Conversations), se uporabljajo za 3 stvari: vodenje igralca, ocenjevanje igralca in podajanje informacij igralcu. Pogovori imajo strukturo grafa (vozlišča in povezave med njimi), celoten pogovor pa poteka linearno. Dodaja se lahko tudi knjige (Books).

Kot napredne možnosti (advanced features) avotrji navajo več različnih stvari, ki so upo- rabne, ko želimo igro narediti naprednejšo, jo omejiti v določenih trenutkih in jo povezati med seboj po naših željah. Vse naše želje pa žal ne bodo realizirane.

Pogoji in efekti (Conditions and effects), se uporabljajo za upravlanje poteka zgodbe naše igre. Upravljamo jo z zastavicami (Flags) in spremenljivkami (Variables). Zastavice delujejo kot stikala, pri katerih ločimo stanji, ko je zastavica aktivna oz. neaktivna (active, inactive). Torej gre za Boolovo vrednost.

Spremenljivke se uporabljajo kot deli pogojev, ki so manjše, večje ali je enako. Po privzetih nastavitvah so nastavljene na 0, njihove vrednosti pa ne morejo zavzeti negativnih števil.

Upravlajmo jih tako, da povemo, za koliko se bo povečala ali pomanjšala. Spremenljivke nam pomagajo pri definiranju pogojev s pomočjo primerjanja (<, >, =, <=, >=). Imamo tudi možnosti uporabe globalne spremenljivke, ki nam je potem na voljo v celotni igri, se pravi skozi vsa naša poglavja.

S pomočjo pogojev lahko naredimo nekaj uporabnih stvari. Uporabljamo jih lahko pri pogo- vorih, upravljamo obnašaje izhoda (bo na voljo ali ne), za prikaz, skritje določenega elementa, postavitev ovir, ...

Premikanje igralca se upravlja na dva načina. Brez dodatnih nastavljanj in spreminjanj osnovnih nastavitev, se lahko igralca premika po v naprej določeni poti (trajectory) ali z nastavitvijo začetne pozicije v sceni (initial position) ter prosto premikanje s klikom

2

(18)

miške.

Z ovirami in aktivnimi površinami scene (barriers, active areas), preprečimo igralcu do- stop do nekega mesta na sceni oz. označimo mesto, kjer se bo ob kliku nanj nekaj zgodilo (interakcija s tem področjem).

1.3 Slabosti

Kljub temu, da je program eAdventure primeren za izdelavo izobraževalnih iger, pa najdemo kar nekaj stvari, ki nam onemogočijo izdelavo bolj dodelane igre.

Kot prva stvar, ki jo opazimo, da se igre da narediti le v 2D, kar je sicer dobro, grafično igra ni zahtevna, 3D pa bi lahko le otežil delo za ustvarjalce iger. 3D efekte lahko do neke mere nadomestimo s pravilno uporabo grafičnih elementov, kot so elementi senčenja...

Za eno izmed stvari, ki nam najbolj manjka ob ustvarjanju iger je funkcija random, kot jo poznamo iz drugih programskih jezikov, ki nam naključno vrne neko število. To pomeni, da direktno ne moremo narediti igre, kjer bi se pri neki nalogi odločili za nekaj, kar bi radi naključno generirali. To največjo oviro predstavlja pri igrah, ki bi rade preizkušale računsko znanje učencev, ter raznolikost števil pri takih tipih nalog.

Če nekdo ustvarja igro, kjer mora v pogoje in zmanjševanje spremenljivk vključiti nega- tivna števila se tu zatakne. Vrednosti spremenljivke so definirane samo za pozitivna števila, vključno s številom 0. Tudi če zmanjšujemo vrednost spremenljivke, se da le to znižati samo do 0.

Kot največji problem pa je za moje mnenje odsotnost funkcije programiranja. Programiranja v smislu tega, da lahko sami napišemo skripto, jo dodamo igralcu, predmetu ali okolju. Glede na to, da je igra v zaključku kot celota Java projekt, bi se lahko to možnost vključilo, pa če tudi samo za programiranje v jeziku Java. S tem bi se odprla nova dimenzija za izdelavo iger, ter omogočilo veliko novih stvari, ki bi jih lahko naredili, poleg zgoraj naštetih.

3

(19)

2 Programski jezik C#

2.1 Predstavitev jezika

C# je objektno orientiran programski jezik. Prvič se pojavi leta 2000, od takrat pa je dobil kar nekaj nadgradenj. Razvilo ga je podjetje Microsoft, ter ga vseskozi razvija in nadgrajuje.

Za razvoj je odgovorna ekipa pod vodstvom Andersa Hejlsberga.

Sodi v družino C programskih jezikov. Glavni cilj je, da bi bil sodoben, preprost programski jezik za objektno programiranje. Kot zanimivost, ime je sestavljeno iz glasbene lastnosti višaja (#), ki pomeni zvišanje tona, kot naj bi ta jezik predstavljal "višji, naprednejši"

jezik, kot je C++.

(vir:https://en.wikipedia.org/wiki/C_sharp_(programing_language))

2.2 Predstavitev osnovnih stvari

V tem razdelku je privzeto, da znanje programiranja bralec že ima, zato gre tu za osnoven opis funkcij in predvsem sintakso jezika. Poudarek je na stvareh, ki so pomembne za ustvar- janje igre v okolju Unity in ustvarjanju skript v jeziku C#.

C# je občutljiv na velike/male črke, zato si je dobro izbrati način, kako bomo zapisovali spremenljivke, razred, funkcij, ter imena programov in se tega držati skozi celotno delo (kot je to priporočljivo za vsako programiranje). Telo zank in pogojev pišemo znotraj zavitih oklepajev ({}), izjave in izrazi pa se končajo s podpičjem (;).

Če želimo dodati kakšen komentar in ga ne upoštevati ob izvajanju kode, to naredimo z upo- rabo //, ki ponazarja enovrstične komentarje, z /* */ pa lahko pišemo daljše, večvrstične komentarje.

V C# so spremenljivke razdeljene v naslednje podatkovne tipe: vrednostn, referenčni in kazalni tip.

4

(20)

2.2.1 Vrednostne spremelnjivke

V programskem jeziku C# je več kot 10 vrednostnih spremenljivk, ki so vsaka zase unikatna.

Za začetno delo pa so dovolj spremenljivke, ki so podane v spodnji tabeli.

TIP OPIS

bool Logična vrednost true ali false int Predstavlja 32-bitno celo število

float Število z enim decimalnim mestom (zapis npr. x = 4.5f) 2.2.2 Nizi (String)

Z nizi (stringi) zapisujemo črke, besede, stavke oz. besedila.

Sintaksa:

Najprej je potrebno deklarirati, za kakšen tip spremenljivke gre (string), nato določiti ime spremenljivke in ji prirediti vrednost, tako da besedilo zapišemo znotraj narekovajev.

Primer: string Ime = "Kevin";

2.2.3 Definiranje in incializiranje spremenljivk

Pri deklariranju spremenljivk v jeziku C# je obvezno, da jim na začetku določimo podatkovni tip. Podatkovni tip spremenljivke lahko med izvajanjem programa spremenimo, saj ima C#

vključene funkcije, ki znajo pretvarjati med kompatibilnimi tipi.

2.2.4 Operatorji

Aritmetični operatorji so operatorji za osnovne računske operacije (+, -, *, /), deljenje po modulu oz. računanje ostanka pri deljenju s številom, ter posebna znaka, ki pomenita povečanje celega števila za 1 (++) in zmanjšanje celega števila za 1 (--).

Relacijski operatorji so operatorji, ki opisujejo razmerje med vrednostima dveh spremen- ljivk. Ti so definirani kot pri večini ostalih programskih jezikov (npr. , ==, !=, >, <...)

Logični operatorji so operatorji, ki operirajo kot logični vezniki med različnimi logičnimi 5

(21)

izjavami. Logični in je predstavljen z znakom &&, logični ali pa je predstavljen z dvema navpičnima črtama ||. Negacija nečesa (logični ne), se označi s (!) pred spremenljivko tipa boolean.

2.2.5 Pogojni stavki in zanke

Glede na to, da so to stavki, ki jih pri programiranju vedno potrebujemo, je potrebno ome- niti, da so v konceptu ti stavki podobno definirani kot pri ostalih jezikih. Drugačna je le sintaksa, ki je vidna na spodnjih slikah.

Slika 1: Sintaksa if stavka.

Slika 2: Sintaksa if-else stavka.

6

(22)

Slika 3: Sintaksa while in for zanke.

2.3 Povezava v Unity

Unity ima možnost programiranja skript v treh jezikih. To so C#, Java in Boo (programski jezik, ki ima podobno sintakso kot Python).

V tej diplomski nalogi se bom osredotočil na programiranje v jeziku C#, ki je tudi bolj uporabljen kot pa Java in Boo.

Za pisanje skript lahko uporabljamo zunanji program, kot je Microsoftov Visual Studio ali pa že vgrajeni program okolja Unity, ki se imenuje MonoDeveloop.

7

(23)

3 Uvod v Unity

3.1 Uvod

Vsi elemnti igre (slike, zvoki, skripte, animacije, ipd.) se nahajajo v mapi Assets. Mapa se samodejno ustvari, ko naredimo nov projekt. Zaradi preglednosti, urejenosti in boljše organi- zacije v njej ustvarimo še podmape: Sprites(za objekte s sliko), Sounds (zvoke), Animations (animacije), Scripts (za skripte) inPrefabs (za razrede objektov), kamor shranjujemo ustre- zne gradnike igre.

Uporabniški vmesnik okolja Unity sestavljajo naslednja okna:

Project - prikaže vsebino mape Assets,

Hierarchy- prikaže seznam objektov trenutne scene, poleg tega pa tudi razmerja child - parent med objekti,

Scene - v tem oknu je vidna scena, prikažejo se objekti, ki so v Hierarchy,

Console- izpisujejo se obvestila programa Unity in sporočila, ki jih prikazujemo preko skript (ukaz Debug.Log),

Inspector - okno, v katerem se prokazujejo komponente objekta, ki jih lahko nato spreminjamo, brišemo ali ustvarjamo nove (npr. Transform, RigidBody...).

3.2 Razlaga nekaterih pojmov

3.2.1 Nadzorovanje dela

V oknu Console se ob zagonu projekta izpišejo morebitne napake, sporočila, ki so ključna za delovanje igre. Tako lahko s pomočjo tega okna sproti preverjamo, če se kje pojavi napaka, kdaj kaj deluje in kdaj ne. Zato je zelo koristna stvar za preverjanje funkcija Debug.Log().

Ta funkcija v oknu Console izpiše to, kar ima zapisano v navednicah v oklepaju.

8

(24)

3.2.2 Uporaba Namespace-ov

Namespace-i so široko uporabljeni v programskem jeziku C#. To so elementi programskega jezika C#, ki so narejeni z namenom, da je program (skripta) organizirana. Nekateri se že privzeto uporabijo v vsaki skripti, ki je ustvarjena, sicer pa jih je potrebno uvoziti.

Taki so recimo UI,EventSystems in drugi. Uvozi se jih z uporabo besedeusing na začetku skripte in nato ime, kakršnega ima.

Primer: using UnityEngine.UI;.

3.2.3 Komponente objekta

Komponente objekta GameObject-a, so lastnosti, ki jih ta objekt ima. Med primeri je dobro omeniti trkalnike (Colliders), skripte, transformacijo (Transform) in druge. Te se najde s klikom na objekt, izpišejo pa se v oknu Inspector. Dodaja se jih lahko s klikom na gumb (v oknu Inspector) Add Component ali pa se jih preprosto povleče v objekt (npr. skripte, slike,...).

S komponentami se lahko upravlja ročno (v oknu Inspector), bolj elegantno in uporabno pa se do njih dostopa v skripti in se jih preko skripte tudi spreminja.

Slaba stran ročnega spreminjanja je, da je zamudno in ponavadi zaradi velikega števila kom- ponent ta način ni uporaben. Zato se jih, kot že omenjeno, elegantneje spreminja s pomočjo skripte.

Ukaz oz. funkcija, ki to omogoči je GetComponent<>();.

Sintaksa: Komponenta izbrano_ime = GetComponent<Komponenta>();

(opomba: Komponenta pomeni ime komponente, ki je določeno v programu Unity, npr.

Rigidbody2D, Transform...) 3.2.4 Metoda Start()

Je metoda, ki se odvije samo enkrat ob zagonu in nikoli več. Izvede se pred vsemi metodami Update().

Uporablja se predvsem za inicializacijo spremenljivk in povezav do drugih stvari (npr. refe- renc do komponent).

9

(25)

3.2.5 Metoda Update()

Metoda, ki se odvije vsako sličico (frame), vsakič, ko se slika posodobi. Najpogosteje se uporablja za implementiranje obnašanja igre (premikanje, preverjanja pogojev...)

3.2.6 Metoda FixedUpdate()

Metodo je dobro uporabiti, če gre za spreminjanje in upravljanje s komponentoRigidBody2D, ko se ukvarjamo s fiziko telesa.

3.2.7 Metoda LateUpdate()

Metoda, ki se izvede za vsemi Update metodami. Uporablja se za upravljanje kamere, ki sledi igralcu. Ta mora slediti igralcu, ki se je morda v funkciji Update() premaknil.

3.3 Ena ideja organizacije okolja

Razporeditev, ki je spodaj opisana je subjektivne narave in ni nujno, da bo bralcu ustrezala, je le eden izmed možnih načinov, kako si urediti okna, za lažje in bolj učinkovito delo.

Že takoj po nekaj delovnih minutah in poskušanju, kaj program zmore se opazi, da so neka- tera okna bolj uporabljena kot druga.

Slika 4: Zaslon po privzetih nastavitvah.

Glede na to, da si postavljamo okolje, ki bo nam primerno, je dobro nekaj osnovnih dej- stev vedeti o določenih razdelkih, ki se nam pojavijo na zaslonu.

10

(26)

Hierarchy je razdelek, v katerem se nahaja seznam vseh elemntov, ki bodo potem nastopali v naši igri. Te elemente določimo mi. Po privzetih nastavitvah je v tem razdelku sprva samo ime scene in Main Camera, ki sodi v sceno. Struktura je lepo tudi vizualno urejena, saj je očitno vidno, kateri deli, ki jih imamo v igri spadajo kam.

Projectrazdelek nam pokaže stvari, ki se nahajajo v naši mapi, kamor shranjujemo projekt.

V ta del lahko dodajamo stvari, ki jih potrebujemo za delo. Druga možnost je, da jih doda- jamo v mapo, kjer je shranjen naš projekt, vendar je to bistveno lažje.

Scene je del okna, kjer stvari, ki smo jih prej dodali sestavljamo skupaj. Tu vidimo dejansko podobo in izgled, kako vse skupaj izgleda. Stvari lahko premikamo, vlečemo, rotiramo itd..

Game se nam pokaže, ko zaženemo igro in jo lahko preizkusimo.

Inspectorpa je najpomembnejši del programa Unity, saj v tem razdelku urejamo skoraj vse kar se dogaja v igri. Elementom določamo pozicije, jim dodajamo komponente, značilnosti, ki želimo, da jih imajo.

Glede na pomembnost elementov je priporočena razporeditev oken sledeča.

Skrajno desno je najbolje nameniti prostor razdelku Inspector, ki se raztegne čez celotno višino, poleg njega na levi združeni razdelki Scene, Game, Animatorv tem zaporedju. Po- novno je najbolje raztegniti ga čez celotno višino ekrana, da imamo večji pregled nad igro.

Inspector je del, kjer stvarem dodajamo razne komponente, spreminjamo njihove lastnosti, dodajamo skripte, zato je res vredno imeti dober pregled nad tem delom. Preostali prosotor na levi razdelimo na dva "kvadrata", kjer se zgoraj levo nahaja razdelekHierarchy, pod njim pa Project in Console. Project si potem še razdelimo tako, da se jasno vidijo mape, kjer imamo stvari za lažje iskanje.

Pomembno pa je, da si okna glede na način dela prilagodimo in naredimo tako, da je čim bolj viden tisti del, ki je za nas pomemben (Animator, Scene, Game, Console,...).

11

(27)

Slika 5: Subjektivna organizacija oken.

3.4 Dodajanje zvoka

Zvok, ki bi ga v igri radi predvajali v ozadju dodamo tako, da kliknemo na GameObject

AudioAudio Source. V oknu Hierarchy se pojavi nov objekt tipa GameObject preko katerega lahko nastavljamo lastnosti zvoka.

3.5 Igralec (Player)

Igralec je v igri sestavljen iz veliko stvari, ki ga naredijo kompletnega, ter privlačnega za igranje.

Ena izmed glavnih stvari, ki naredijo igralca privlačnega za igranje so animacije. Animacija je niz sličic, ki se z določeno hitrostjo zaporedno priakzujejo, kar nam daje občutek gibanja.

V igrah imamo ponavadi veliko animacij (za glavni lik, NPC-je, animirani elementi ozadja...), prav tako pa je običajno, da ima en objekt veliko različnih animacij, ki se zamenjujejo glede na dogajanje v igri.

Glavni igralec lahko npr.: hodi, teče, skače, govori, ipd.. Narediti dobro animacijo je zah- tevno, zato si običajno pomagamo s t.i. Sprite Sheet-i - slikami, na katerih so manjše sličice za različne animacije. Tako imamo na isti sliki sličice, ki sestavljajo animacijo za hojo, tek, skoke...

12

(28)

Slika 6: Primer Sprite Sheet-a.

Na sliki vidimo primer Sprite Sheet-a. Včasih je bilo rezanje takih slik časovno zelo potratno, saj je bilo potrebno narediti to vse na roke, danes pa obstajajo programi, ki to na- redijo sami. Za rezanje sličic lahko uporabimo zunanji program, bolj priročno pa je uporabiti orodje, ki je vključeno v Unity.

Kako se tega lotimo? Ko kliknemo na sliko v mapi, se nam v Inspector-ju pojavijo njene lastnosti. Če želimo doseči, da bo Unity razumel, da je slika sestavljena iz več manjših sličic, moramo privzeto lastnost Sprite Mode iz vrednosti Single (predstavlja eno sliko), spreme- niti v Multiple. Preko Inspector-ja nato zaženemo Sprite Editor, kjer lahko Sprite Sheet uredimo na dva načina:

Avtomatsko

Program, z uporabo vgrajenega algoritma avtomatsko prepozna in razreže Sprite Sheet v mrežo posameznih sličic.

Ročno

Če z avtomatskim razrezom nismo bili zadovoljni, kar se redko zgodi, pa lahko to naredimo ročno.

Ni odveč poudariti, da nam ročni proces razreza običajno vzame veliko časa.

Tu sta dve možnosti, ki nista na voljo v avtomatskem načinu in sicer Grid by Cell Size oz. Grid by Cell Count, s pomočjo katerih določimo velikost delčka slike oz.

kako naj to sliko obreže.

Ko z delom zaključimo, se ob sliki, ki smo jo uredili, pojavijo njeni razrezi.

13

(29)

3.6 Animacija

Unity vsebuje veliko uporabnih orodij, eno od njih je orodje za ustvarjanje animacij. Ani- macije so v igrah zelo pomemben del, saj se z njimi naredi igro bolj privlačno za igranje.

Sploh ko gre za gibanje igralca oz. drugih računalniško vodenih likov v igri (NPC-jev), torej animacij hoje, teka, skakanja...

Animacija je sestavljena iz več slik, ki se v nekem zaporedju prikazujejo. Več kot je v ani- maciji sličic, bolj se nam zdi realna in kvalitetna.

Animacija ponavadi vsebuje neko začetno animacijo, npr. ko lik stoji. Novo animacijo je enostavno narediti, postopek poteka tako, da najprej označimo slike, ki bodo v animaciji in jih povlečemo v okno Scene. Unity bo sam prepoznal, kaj želimo in bo ustvaril novo animacijo, ki ji moramo nato določiti ime in jo shraniti v posebno mapo. Poleg animacije pa bo avtomatsko dodal še komponento, ki skrbi za nastavitve animacij - Animator.

Ob kliku na okno Animator se pokaže graf, ki prikazuje prehode med stanji (vsako stanje pomeni animacijo). Ta stanja so podana v obliki pravokotnikov. Ob dodajanju animacij se v graf dodajajo nova stanja.

Prvo stanje v grafu je Idle. Ta je iz stanja Entry povezan z enosmerno puščico, kar po- meni, da se bo ob zagonu igre (Entry) izvedla ta animacija. Ob pogledu na graf opazimo, da je stanje Idle obarvano oranžno, ostala stanja pa s sivo. Oranžo stanje pomeni, da je to privzeto stanje (Default State). Če želimo privzeto stanje spremeniti, moramo klikniti na želeno stanje z desnim klikom in izbrati možnost Set as Layer Default State. Začetno stanje je lahko samo eno.

Prehodi med animacijami so grafično prikazani s pomočjo usmerjenih puščic. Puščica tako pokaže možna stanja v katera se lahko premaknemo iz trenutnega stanja. Prehode dodamo z desnim klikom in izbiro Make Transition. Lastnosti prehoda si lahko ogledamo s klikom na puščico, ki označuje prehod. Pomembna lastnost, ki vpliva na potek animacije in se določa na prehodih (na puščicah), je Has Exit Time. Če je ta možnost označena, bo animacija imela prehod z zakasnitvijo. To je uporabno pri 3D igrah, kjer se lik ne pramakne takoj ob kliku, ampak potrebuje nekaj časa, da začne hoditii. To naredi premikanje realistično. Protiprimer tega pa je igra Super Mario, kjer morata Mario ali Luigi skočiti natačno v tistem trenutku, ko je pritisnjena tipka za skok.

14

(30)

Slika 7: Primer grafa v Animator-ju.

V oknu Animator se nastavlja parametre. V okolju Unity je sistem tak, da najprej določimo spremenljivke, od vrednosti teh spremenljivk pa je odvisno, katero animacijo bo predvajal.

Nastaviti je možno različne vrste spremenljivk (Bool, Intiger, Trigger in Float). Ti pogoji bodo s pomočjo skripte vplivali na to, kdaj se bo določena animacija odvila.

Kot primer je ta, da imamo dve animaciji. Prva je animacija Idle, druga pa animacija teka.

Ustvarimo parameter hitrost (tipa Intiger). Nato v skripti sprogramiramo, da, ko je hitrost lika enaka 0, predvajamo animacijo Idle, sicer pa animacijo hoje.

V skripti sta uporabljeni samo metodi Start()in Update().

V metodi Update()skripta preverja, če je pritisnjena določena tipka in spremenila vrednost parametra, ki smo ga ustvarili v oknuAnimatorin s tem določi, katera animacija se bo odvila.

Ko pa bo tipka dvignjena, se bo vrednost vrnila na začetno, ter s tem zagnala animacijoIdle.

3.7 Trkalniki (Colliders)

Trkalniki (angl. Colliders) so komponenta, ki jo lahko določimo objektu, da zaznava trke, klike in dotike. Trkalniki so del knjižnice fizike (Physics). So nevidni, torej se jih ob igranju ne vidi, so pa pomembna komponenta za bolj realistično igro. Po obliki se jih da prilagajati glede na obliko objekta.

Če ustvarjamo igro v 2D grafiki, potrebujemo posebne trkalnike, ki so del knjižnicePhysics2D.

V osnovi gre za isto stvar, kot v 3D grafiki, kjer je potrebno določiti del objekta, na katerem 15

(31)

bo igra zaznala trk.

Obstajajo različne oblike trkalnikov, ki se med seboj razlikujejo po obliki in kompleksnosti izračuna ali je prišlo do trka. Primer: za Polygon Collider 2D, se porabo več strojne moči, kot pa za Box Collider 2D.

Trkalniki se med seboj lahko pokrivajo, kar pomeni, da ima lahko en objekt več trkalnikov.

3.7.1 Box Collider 2D

Trkalnik, ki je pravokotne oblilke. Ima določeno pozicijo, širino in dolžino glede na velikost objekta.

Slika 8: Oblika Box Collider-ja.

3.7.2 Circle Collider 2D

Trkalnik, ki ima obliko kroga. Določena sta mu pozicija in njegov polmer (radij).

Slika 9: Oblika Circle Collider-ja.

16

(32)

3.7.3 Edge Collider 2D

Trkalnik, ki je uporaben za natančno določanje dotikov in trkov v točki, na robu... Obliko se da spremeniti v premico ali pa eno samo točko.

Slika 10: Oblika Edge Collider-ja.

3.7.4 Polygon Collider 2D

Poligonalni trkalnik ima posebno lastnost, saj se, ko ga dodamo objektu, prilagodi njegovi obliki, kot jo sam zazna. To pomeni, če bo objekt narejen brez ozadja, se bo ta poskušal kar se da prilagoditi njegovi obliki.

Ustvarjalci Unity-ja pa opozarjajo, da se najbrž ne bo popolnoma prilagodil obliki, če je objekt zahtevne oblike, če pa je dokaj nezahtevne oblike, pa se bo ta zelo dobro prilagodil njegovi obliki (vir: https://docs.unity3d.com/Manual/CollidersOverview.html).

Slika 11: Oblika Polygon Collider-ja.

3.7.5 Capsule Collider 2D

Trkalnik v obliki kapsule (oblika nekakšne elipse). Uporaben predvsem za objekte, ki so popačene krožne oblike.

17

(33)

Slika 12: OblikaCapsule Collider-ja.

V 3D prostoru pa obstaja še trkalnik v obliki sfere (Sphere Collider), trkalnik v obliki kolesa (Wheel Collider) in terenski trkalnik (Terrain Collider).

3.8 Drag&drop

Princip drag and drop srečamo v mnogih igrah, v zelo različnih situacijah, zato v orodju Unity ne obstaja predpripravljen sistem, ki bi ga lahko samo uporabili, ampak ga moramo po svojih željah in posebnostih uporabe ustvariti.

Unity vsebuje zelo veliko knjižnic, med njimi tudi razred EventSystems, ki sodi v knjižnico UnityEngine, ki je uporaben pri programiranju principa drag and drop. Knjižnica vsebuje metode, ki jih potrebujemo pri implementiranju tega principa. Njihovo sintakso lahko najde- mov priročniku Unity Manual oz. kar direktno dopišemo imena ustreznih metod za metodo MonoBehaviour.

Metode so tri: Za začetek vlečenja (IBeginDragHandler), med vlečenjem (IDragHandler) in konec vlečenja (IEndDragHandler). Ko jih dodamo na konec Monobehaviour razreda, jih z desnim klikom podRefactorImplement Interfacevstavimo v skripto. Ko to odklikamo, se pokaže rumena črta, ki prikazuje, kje se bo sintaksa izpisala. S tipko enter potrdimo izbrano pozicijo.

Še preden začnemo s pisanjem skripte, je potrebno postaviti okolje, kjer bodo objketi stali in se premikali. Za to je potrebno ustvariti Canvas, ki si ga lahko predstavljamo kot omejen prostor, kjer se nahajajo grafični elementi.

Canvas je del UI (User Interface-a), natančneje GUI (Graphical User Interface). Canvas ustvarimo tako, da kliknemo na GameObjectUICanvas.

18

(34)

Zaradi boljše preglednosti in lažjega pisanja skripte je dobro ustvariti Panel. Panel je del Canvas-a, ki ga zapolni kot nekakšno platno, ki se pokaže na zaslonu. Celoten okvir se na začetku obarva sivo. Ta siv pravokotnik je najbolje spremeniti na željeno velikost, saj bodo na njem objekti, ki se jih bo dalo premikati.

Nato na Panel dodajamo objekte, ki jih bomo premikali (v nadaljevanju jih bomo poime- novali ikone). Ko ikone dodamo, jih Unity ponavadi poljubno postavi v neko točko, bodisi eno na drugo, bodisi jih malce premeče, skratka skoraj gotovo niso urejeni, kot bi si želeli.

Uredimo jih tako, da območju, kjer se nahajajo dodamo t.i. Layout Group (Script), ki skrbi, da so ikone urejene. Obstaja več možnosti kako jih uredi po Panel-u: če gre za gumbe v eni vrstici, je pametno izbrati Horizontal Layout Group (Script), ki jih uredi v vrsto.

Nato se lahko odločimo, kako bodo postavljeni (od leve proti desni, v centru...), kar se določi s pomočjo lastnosti Layout Group (Script-a, ki se imenujeChild Alignment. Na voljo je 9 možnosti.

Spacing je lastnost, ki določi razmik med ikonami, ko so urejene.

Ikonam lahko dodamo še veliko stvari, kot so npr.: besedilo (Text), slike (Image) in druge.

Ko končamo z definiranjem postavitve in izgleda ikon, jim moramo dodati skripto, preko katere bomo lahko implementirali njihovo premikanje.

Vsaki ikoni je potrebno določiti začetni Panel, v katerem se nahaja. Za določitev si poma- gamo s pomočjo komponente Transform.

V metodiOnBeginDragje potrebno določiti začetnega starša (podobno kot začetna pozicija), da bomo lahko ikono vrnili na začetno pozicijo, če je uporabnik ne bo postavil na ustrezno mesto.

V metodi OnDrag se nato vedno znova osvežuje pozicija objekta, ko vlečemo objekt po za- slonu.

Ko uporabnik konča z vlečenjem se sproži metoda OnEndDrag. Ob tem dogodku preverimo, če je pozicija ikone ustrezna. V primeru, da ta ne ustreza mestu, kamor je potrebno ikono povleči, jo vrne ne začetno pozicijo, ki je bila določena na začetku skripte.

V skripti je spremenjena lastnost objekta in sicer blockRaycasts. Na začetku premikanja je nastavljena na false, na koncu pa na true.

Spreminjanje vrednosti blockRaycasts v tem primeru omogoči, da se ikono, ki jo vlečemo

19

(35)

lahko spusti na mesto, ki je zanjo predpisano, sicer bi jo avtomatsko postavilo na začetno mesto. Z nastavitvijo vrednosti blockRaycasts na false dovolimo, da se lahko dva objekta prekrivata. Ko pa je ikona na pravem mestu, s spremembo vrednosti na trueomogočimo, da se ikona "pripne" na pravilno mesto.

Skripto DropZone moramo dodati vsem objektom, ki služijo kot mesta, kamor lahko ikone povlečemo. Skripta preverja, če je to pravo mesto za objekt, ki ga je uporabnik povlekel na to pozicijo, če ni, ga vrne na začetno mesto. Iz skripte Dragable uvozimo spremenljivko KateraPozicija. Ta spremenljivka pove, katera pozicija je za ikono pravilna.

3.9 Premikanje igralca

3.9.1 Premikanje z miško Objekt sledi kliku miške

Ko imamo objekt/sliko, ki naj bi se premikala po zaslonu, jo prenesemo v sceno oz. v okno Hierarchy. Ustvarimo novo skripto s poljubnim imenom. To skripto dodamo kot komponento temu objektu.

Skripta bo naredila to, da bo ob kliku na poljubno mesto na zaslonu objekt sledil temu kliku ali pa se bo direktno prestavil tja (kot neke vrste teleportacija).

Katera izmed teh dveh situacij se bo zgodila, je odvisno od spremenljivke določene v skripti in sicer MoveSpeed, ki določa, kako hitro bo objekt sledil kliku. Če je ta hitrost nastavljena na zelo majhno vrednost, bo objekt sledil miški, dokler bo ta kliknjena (cilj doseže zelo po- časi).

V skripti smo uporabili funkcijoLerpvektorjaVector2, ki ima matematično ozadje in naredi to, da se pozicija predmeta premakne za toliko kolikor določimo spremenljivko t v funkciji Lerp, glede na razdaljo med miško in objektom. Če jo določimo na 0.5, bo vedno premaknil objekt na polovico razdalje med objektom in pozicijo miške. Če pa MoveSpeed nastavimo na dovolj veliko (npr. 50 ali 100), pa izgleda, kot da se objekt takoj prestavi na pozicijo, kamor smo kliknili z miško (neke vrste teleportacija).

Premikanje objekta po zaslonu s prijemom

Unity ponuja veliko možnosti za rešitev tega problema, spodaj pa je opisana ena, ki zgleda

20

(36)

dokaj zahtevna, vendar je povsem logična. Ključne ideje v rešitvi pa so lahko v pomoč za več nadaljnih stvari.

Na začetku definiranja razreda uporabimoIBeginDragHandler,IDragHandler,IEndDragHandler.

Za uporabo teh funkcij z desnim klikom in podRefactor→Implement interface, izpiše celotno sintakso metode.

Ko so vse te tri metode v istem zaporedju dodane v skripto, je potrebno določiti, da gre za objekt in mu dodamo ime. Začetno pozicijo shranimo v spremenljivko tipa Vector3.

Začetna pozicija pomaga olajšati zadevo, če so v skripto vključena tudi druga preverjanja (npr. ali je objekt še na zaslonu).

V metodi OnBeginDrag moramo inicializirati objekt, kateremu skripta pripada ter začetno pozicijo.

V metodi OnDrag shranimo trenutno pozicijo, na kateri se objekt, ki ga vodimo z miško, nahaja. Ta pozicija se ves čas posodablja.

OnEndDrag je metoda, v kateri določimo, kaj se zgodi z objektom, ko se vlečenje ustavi.

3.9.2 Premikanje s tipkovnico

Pomembna razlika med programoma eAdventure in Unity je v nadzoru nad glavnim likom.

Pri eAdventure je nadzor možen zgolj preko miške, pri Unity-ju pa lahko lik nadziramo z miško, tipkovnico, kontrolerjem oz. neko drugo vhodno napravo.

V zavihtku EditProject SettingsInput se v Inspector-ju odpre okno Input Manager, kjer je možno videti privzete nastavitve za različne načine interakcije z igro. To je pomembno vedeti zaradi dejstva, da v skripti vemo, katera tipka predstavlja katero smer, katere tipke so njena alternativa, ipd..

Predstavili bomo postopek, s katerim dosežemo, da se objekt premika glede na uporabo smer- nih tipk (gor, dol, levo, desno). Objekt postavimo na sceno (oz. Hierarchy) in mu dodamo skripto. V njej ustvarimo spremenljivko MoveSpeed, preko katere bomo nastavljali hitrost premikanja in jo v metodi Start() inicializiramo na neko poljubno vrednost.

V metodi Update() zaznavamo pritisk tipk in se odzovemo s premikom v željeno smer. Za zaznavanje pritiska tipke uporabimo metodo Input.GetAxisz vhodnim parametrom "Hori- zontal" oz. "Vertical", ki določa os premika. Input.GetAxis vrača vrednosti od -1 do 1, kar

21

(37)

je odvisno od smeri premika (levo-desno, gor-dol) in časa, ko držimo tipko pritisnjeno. Pre- mik pa naredimo z uporabo komponente Transform oz. njene metode Translate, ki prestavi objekt na želeno lokacijo. Pozicijo na ekranu določa 3D vektor, zato je potrebno v 2D načinu njegovoz koordinato nastaviti na vrednost 0f. S spremenljivkoMoveSpeed nadziramo hitrost premikanja in sicer tako, da z njo pomnožimo vrednost teh dveh koordinat.

3.10 Prehod med scenami

Za prehajanje med scenami je potrebno znotraj porjekta imeti vsaj dve sceni. Začetno in drugo, v katero bomo naredili prehod.

Vse scene, med katerimi se prehaja, morajo biti shranjene v mapi Assetsoz. v eni od njenih podmap. Novo sceno ustvarimo z desnim klikom na mapo, v kateri imamo shranjene scene in izbiro CreateScene.

Prehod med scenami je lahko narejen na različne načine, odvisen pa je od izbire in poteka igre, ki jo ustvarjamo.

3.10.1 Prehod s pomočjo gumba

Gumb, ki bo sprožil prehod na novo sceno, se ustvari pod zavihtkom GameObjectUIButton.

Gumbu, ki se pojavi na zaslonu, se da spreminjati napis, barvo, obliko, sliko... Med drugim se da spreminjati tudi to, da se bo barva gumba spremenila, ki bo kazalec miške nad njim.

Besedilo, v gumbu lahko spremenimo pod menijem ButtonText.

Če želimo, da bomo s pritiskom na gumb prešli na novo sceno, pa mu moramo dodati skripto.

Skripta, ki to počne je zelo preprosta, saj le sporoči na katero sceno se mora kamera prema- kniti. Glavna funkcija, ki jo bomo za to uporabili je Application.LoadLevel(string), ki kot vhodni podatek dobi ime scene v obliki niza in s tem določi, kam naj se kamera prema- kne.

Ime scene, kam se bo kamera premaknila naknadno določimo v oknu Inspector.

Skripto za premikanje kamere na izbrano sceno, moramo dodati objektu Main Camera. Če želimo, da bo funkcija v skripti našla naše scene v igri, moramo pod zavihtkom FileBuild Settings preveriti ali so vse scene na katere lahko prehajamo v oknu Scene in Build. Sicer jih

22

(38)

dodamo ročno.

Da se bo ob kliku na gumb zagnala skripta in s tem prehod na novo sceno, moramo temu gumbu dodati funkcijoOn Click(). Funkcijo dodamo komponentiButton (Script). V funk- ciji On Click()je pomembno, da je izbran objekt, ki se menjava oz. spreminjaMain Camera.

Med funkcijami, ki se mora izvesti, izberemo metodo iz skripte, ki skrbi za prehod na novo sceno.

Ko je le ta izbrana, ob zagonu igre prehod med scenama deluje.

3.10.2 Prehajanje med scenami ob dotiku oz. trku

Pri tem prehajanju med scenami je zelo uporabna knjižnicaUnityEngine.SceneManagement, ki jo je potrebno dodati na začetku skripta. Uporablja se za nadzorovanje scen in upravljanje z njimi. Za naše delo je uporabljen razred SceneManager, ki vsebuje funkcije nalaganja scen z vpisom njihovih imen. Vsebuje še veliko drugih uporabnih funkcij, ki pa za nas trenutno niso pomembne.

Prehod se v tem primeru sproži ob kliku oz. trku dveh ali več objektov. Za zaznavanje teh dogodkov, moramo vsakemu objektu dodati komponenti: RigidBody2Din Collider (trkal- nik). S komponento Rigidbody2D omogočimo, da objekt dobi lastnost fizičnega objekta z maso na katerega vpliva gravitacija in zunanje sile, ki jih sprogramiramo preko skript. Če ne želimo, da bodo objekti popadali iz zaslona, jim moramo silo gravitacije (Gravity Scale) zmanjšati na 0. S trkalniki pa objekti dobijo zmožnost zaznavanja ali je med njimi prišlo do trka oz. prekrivanja. Več o trkalnikih je napsano v poglavju Trkalniki.

Vsem objektom, ki bodo sprožili menjavo scene, je potrebno v komponenti trkalnika (Col- lider), obkljukati možnost Is Trigger. Če je lastnost Is Trigger obkljukana, se trkalnik ne obnaša kot trden objekt ampak dovoli, da drugi trkalniki potujejo skozi njega.

Metoda, ki je uporabljena je OnTriggerEnter2D (Collider2D col), ki se sproži vedno, ko nek objekt pride v trigger (sprožilec) objekta, ki vsebuje to skripto. Nato pa z if stavkom preverimo, če je objekt, ki je prišel v trigger ustrezen. Če je if stavek resničen, se bo izvedla zamenjava scene.

23

(39)

3.11 Kamera sledi igralcu

To je koristno takrat, ko je vidno polje manjše od celotnega ozadja ali pa je igra preprosto narejena tako, da se igralec veliko premika okoli.

Stvar je načeloma preprosta, saj moramo doseči le, da bo pozicija kamere sledila koordinatam igralca in zamisel zapisati v kodi. V skripti bo samo funkcijaUpdate(), ki bo vsakič spreme- nila pozicijo kamere glede na pozicijo igralca. Najprej je potrebno definirati spremenljivko Transform Igralec, glede na katero se bodo koordinate kamere posodabljale. Ker gre za 2D prostor, je koordinata z enaka kot je koordinata kamere na začetku, lahko pa jo posodablja glede na igralca. Torej z zadnjim razmislekom je skripta uporabna tudi v 3D ustvarjanju igre.

Skripto je potrebno dodati kot komponento kamere (ponavadi Main Camera). Če želimo, da se bo ozadje premikalo s kamero, to preprosto dosežemo tako, da nastavimo ozadje kot otroka (child) objekta kamere (postane njen otrok). V praksi pomeni, da se lastnosti kamere prenesejo na njene otroke.

Na tak način se da narediti "neskončno" ozadje v igri, kot je to recimo pri igri Super Mario, kjer se ozadje z oblaki vedno premika s kamero.

3.12 Projekt do .exe datoteke

Ko smo naredili vse scene in zaključimo projekt, kot je bilo to načrtovano ali pa se sproti pojavi želja, da bi videli kako bo vse skupaj izgledalo kot končen program (ne le v oknu Game), je projekt potrebno zgraditi in zaključiti.

Pod menijem FileBuild Settings (bližnjica Ctrl+Shift+B) se odpre okno za dokonča- nje/izgradnjo projekta.

24

(40)

Slika 13: Okno Build Settings.

Najpomembnejša in glavna stvar tu je, da se v deluScenes in Build nahajajo vse scene, za katere želimo, da so v igri, saj jih drugače ne bo vključil.

Poleg vsake scene se nahaja številka. Začetno sceno se določi tako, da se jo postavi najbišje v seznamu vseh scen. Lahko bi to naredili s pomočjo skripte, vendar je tako enostavneje.

Začetna scena ima številko 0.

V delu Platform je potrebno izbrati, za katero napravo/operacijski sistem je igra namenjena.

Ta stvar se sicer že od samega začetka upošteva, ko se začne sestavljati igro. To pa zato, ker je poimenovanje tipk in določanje stvari drugačno za npr. PC, Xbox in sploh za zaslone na dotik.

Ko so te stvari izbrane, je potrebno s klikom na gumb Build shraniti igro kot.exe datoteko.

25

(41)

4 Seznam priloženih skript

• PlayerManager.cs

• Draggable.cs

• DropZone.cs

• Sledenje_Kamere.cs

• Gumb_Prehod.cs

• Menjava_Trigger.cs

• Premikanje_Z_Misko.cs

• Sledenje_Miski.cs

• Premikanje_S_Tipkami.cs

• Trigger_Scene.cs

26

(42)

5 Viri

SCOLASTICI, Claudio. 2015. Unity 2D Game Development Cookbook. Velika Britanija:

Packt Publishing Ltd. ISBN 978-1-78355-359-4.

DOYLE, Barbara. 2014. C# Programming: From Problem Analysis to Program Design.

ZDA: Cengage Learning. ISBN: 978-1-285-09626-1.

The <e-Adventure> platform: User’s Guide [online]. Madrid: april, 2011. Dostopno na sple- tnem naslovu: <http://e-adventure.e-ucm.es/tutorial/files_EN/eAdventure-v1.3RC-2-User_s- guide-en_EN.pdf>.

2D Game Creation: Everything you need to start making 2D games in Unity [online]. 2017.

Unity – Game Engine. [Citirano: 11. feb. 2017; 10:15]. Dostopno na spletnem naslovu:

<https://unity3d.com/learn/tutorials/topics/2d-game-creation>.

27

Reference

POVEZANI DOKUMENTI

Na- padi, ki jih prepoznamo samo na podlagi klinične slike, vodijo v precenjevanje ali podcenjevanje po- javnosti NK, saj se lahko pojavljajo zgolj elektroen-

Pri tem smo na nekatere vidike lahko pozorni tudi starši in z nekaj posluha pripomoremo k izboljšanju njihovega počutja.. Na vseh področjih nam bo v veliko pomoč uglašenost na

novembra letos večina okužb posledica spolnih odnosov z okuženimi moškimi, sledile so okužbe žensk iz držav z velikim deležem okuženega prebivalstva, okužbe žensk, ki

Programa za krepitev zdravja se lahko udeležite v centru za krepitev zdravja/zdravstvenovzgojnem centru, ki je v vašem zdravstvenem domu.. Da bo pot lažja, na

Spoznali boste osnovne značilnosti depresije, vzroke zanjo ter potek in načine zdravljenja ter pridobili znanja in veščine, s katerimi si boste lahko pomagali sami in izboljšali

Ezért olyan fontos, hogy elegendő rostokban gazdag élelmiszert és folyadékot fogyasszon, valamint hogy eleget mozogjon. Rostokban gazdagok a zöldségek, gyümölcsök,

Moja h~erka je pred pol leta postala mama, jaz pa dedek. Ne znajdem se dobro, kajti zdravi se zaradi poporodne depresije – odkrito re~eno, prej si sploh nisem predstavljal, kako hudo

Najdete jih na tretji, manjši po- lici prehranske piramide. Izbirajte čim bolj pusta oziroma posneta živila iz te police. Gobe narežite na lističe, jih popražite na olju, dodajte