programiranjeizobraŽevalnih...
Post on 31-Jan-2020
6 Views
Preview:
TRANSCRIPT
UNIVERZA V LJUBLJANI
PEDAGOŠKA FAKULTETA
DOMEN BRGLEZ
PROGRAMIRANJE IZOBRAŽEVALNIH
IGER V PROGRAMU UNITY
DIPLOMSKO DELO
Ljubljana, 2017
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
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.
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#
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#
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
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
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
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
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
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
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
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
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
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
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) in Prefabs (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
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 besede using 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
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 komponento RigidBody2D,
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
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.
Project razdelek 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.
Inspector pa 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, Animator v 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 razdelek Hierarchy, 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
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
→ Audio → Audio 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
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
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
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 oknu Animator in 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 animacijo Idle.
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žnice Physics2D.
V osnovi gre za isto stvar, kot v 3D grafiki, kjer je potrebno določiti del objekta, na katerem
15
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
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
Slika 12: Oblika Capsule 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 pod Refactor→ Implement Interface vstavimo 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 GameObject → UI → Canvas.
18
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 imenuje Child 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 metodi OnBeginDrag je 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
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 true omogoč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 funkcijo Lerp vektorja Vector2, 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
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 uporabimo IBeginDragHandler, IDragHandler, IEndDragHandler.
Za uporabo teh funkcij z desnim klikom in pod Refactor→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 Edit → Project Settings → Input 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.GetAxis z vhodnim parametrom "Hori-
zontal" oz. "Vertical", ki določa os premika. Input.GetAxis vrača vrednosti od -1 do 1, kar
21
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
njegovo z koordinato nastaviti na vrednost 0f. S spremenljivko MoveSpeed 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 Assets oz. v eni od njenih
podmap. Novo sceno ustvarimo z desnim klikom na mapo, v kateri imamo shranjene scene
in izbiro Create → Scene.
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 GameObject → UI →
Button.
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 Button → Text.
Č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 File → Build
Settings preveriti ali so vse scene na katere lahko prehajamo v oknu Scene in Build. Sicer jih
22
dodamo ročno.
Da se bo ob kliku na gumb zagnala skripta in s tem prehod na novo sceno, moramo temu
gumbu dodati funkcijo On Click(). Funkcijo dodamo komponenti Button (Script). V funk-
ciji On Click() je pomembno, da je izbran objekt, ki se menjava oz. spreminja Main 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žnica UnityEngine.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: RigidBody2D in 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
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 funkcija Update(), 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 File → Build Settings (bližnjica Ctrl+Shift+B) se odpre okno za dokonča-
nje/izgradnjo projekta.
24
Slika 13: Okno Build Settings.
Najpomembnejša in glavna stvar tu je, da se v delu Scenes 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
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
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
top related