Mario Dobaj IZDELAVA STRATEŠKE IGRE Z …V nadaljevanju smo se lotili pisanja skripte, ki iz...
Transcript of Mario Dobaj IZDELAVA STRATEŠKE IGRE Z …V nadaljevanju smo se lotili pisanja skripte, ki iz...
UNIVERZA V MARIBORU
FAKULTETA ZA ELEKTROTEHNIKO,
RAČUNALNIŠTVO IN INFORMATIKO
Mario Dobaj
IZDELAVA STRATEŠKE IGRE
Z GRAFIČNIM POGONOM UNITY
Diplomsko delo
Maribor, april 2016
UNIVERZA V MARIBORU
FAKULTETA ZA ELEKTROTEHNIKO,
RAČUNALNIŠTVO IN INFORMATIKO
Mario Dobaj
IZDELAVA STRATEŠKE IGRE
Z GRAFIČNIM POGONOM UNITY
Diplomsko delo
Maribor, april 2016
IZDELAVA STRATEŠKE IGRE
Z GRAFIČNIM POGONOM UNITY
Diplomsko delo
Študent: Mario Dobaj
Študijski program: Univerzitetni študijski program,
Računalništvo in informacijske tehnologije
Mentor: Damjan Strnad, izr. prof. dr.
Lektorica: Aleksandra Papež, prof. slov. in zgod.
Izdelava strateške igre z grafičnim pogonom Unity
Ključne besede: Unity, strategija, igre, razvoj iger
UDK: 004.388.4:004.4'275(043.2)
Povzetek
V diplomskem delu smo preučili osnove uporabe prosto dostopnega razvojnega orodja in
grafičnega pogona Unity. Pridobljeno znanje smo nato uporabili za načrtovanje in razvoj
preproste 3D strateške igre v programu Unity. Delo je vključevalo izdelavo 3D modelov s
programom Blender, iskanje in prilagajanje brezplačnih zvočnih datotek za glasbeno
ozadje igre ter zvočne učinke. Obenem je šlo za programiranje generatorja sveta ter
implementacijo funkcionalnosti sistema ekonomije in bojevanja v igri, pripravo
uporabniškega vmesnika igre in neprestano sprotno testiranje vseh podrobnosti. Rezultat
dela je samostojna računalniška igra, ki jo je možno igrati na operacijskih sistemih Linux,
Windows in MacOS.
I
Development of a strategy game with the Unity graphics engine
Keywords: Unity, strategy, games, game development
UDK: 004.388.4:004.4'275(043.2)
Abstract
In this thesis, we studied the basics of using the free development tool and graphics engine
Unity. The knowledge we aquired was used for the planning and development of a simple
3D strategy game with the Unity engine. The work included making of 3D models with
Blender, finding and adjusting free sound files for the music background and sound effects,
programming a world generator, implementing the functionality of an economy and
fighting system, creating a user interface and continuous testing of all the details. The
result is a standalone computer game, that can be played on the Linux, Windows and
MacOS operating systems.
II
KAZALO VSEBINE
KAZALO VSEBINE............................................................................................................III
KAZALO SLIK...................................................................................................................IV
1.UVOD................................................................................................................................1
2.UPORABLJENA ORODJA...............................................................................................2
2.1.Grafično oblikovanje..................................................................................................2
2.2.Glasba.........................................................................................................................2
2.3. Programiranje............................................................................................................3
3.IMPLEMENTACIJA IGRE...............................................................................................7
3.1.Generiranje sveta........................................................................................................7
3.2. Ekonomija................................................................................................................10
3.3.Bojevanje..................................................................................................................15
3.4.Uporabniški vmesnik................................................................................................19
3.5.Glasba in zvočni učinki............................................................................................20
4.DELOVANJE IGRE........................................................................................................21
4.1.Ekonomija.................................................................................................................22
4.2.Bojevanje..................................................................................................................23
5.SKLEP..............................................................................................................................27
6.SEZNAM UPORABLJENIH VIROV.............................................................................28
7.Priloga A...........................................................................................................................29
III
KAZALO SLIK
Slika 2.1: Primer dela v programu Blender............................................................................2
Slika 2.2: Primer razvijalnega okolja Unity...........................................................................4
Slika 2.3:Primer nekaterih lastnosti, ki določajo predlogo lokostrelcev................................5
Slika 2.4: Prikaz datotek projekta v programu Unity.............................................................5
Slika 3.2: Osnovni gradnik skala...........................................................................................7
Slika 3.1: Osnovni gradnik trava...........................................................................................7
Slika 3.4: Osnovni gradnik voda...........................................................................................7
Slika 3.3: Osnovni gradnik skala s snegom...........................................................................7
Slika 3.5: Osnovni gradnik zlato...........................................................................................8
Slika 3.6: Osnovni gradnik drevo...........................................................................................8
Slika 3.7: Primer sveta, ko so sektorji veliki..........................................................................9
Slika 3.8: Primer sveta, ko so sektorji majhni........................................................................9
Slika 3.9: Praktično dostopne spremenljivke generatorja sveta...........................................10
Slika 3.10: Mestna hiša........................................................................................................11
Slika 3.11: Majhno polje......................................................................................................11
Slika 3.12: Veliko polje........................................................................................................11
Slika 3.14: Podoba zgradb med gradnjo...............................................................................11
Slika 3.13: Stanovanjska hiša...............................................................................................11
Slika 3.15: Zgradbe za pridelavo lesa, kamenja in zlata......................................................11
Slika 3.16: Tržnica...............................................................................................................11
Slika 3.17: Primer iskanja lokacije za gradnjo.....................................................................12
Slika 3.18: Primer računanja oddaljenosti od mestne hiše...................................................14
Slika 3.19: Prikaz preračunavanja oddaljenosti od mestne hiše v primeru dodajanja cestnih
odsekov (primerjaj s sliko 3.18)...........................................................................................14
Slika 3.20: Tržnica in njen uporabniški vmesnik.................................................................15
Slika 3.21: Nastavitve za izdelavo navigacijske mreže........................................................16
Slika 3.22: Z modro barvo je prikazana zgrajena navigacijska mreža.................................16
Slika 3.23: Primerjava velikosti mreže za zaznavanje trkov lokostrelca in viteza...............17
Slika 3.24: Izbiranje več vojakov hkrati...............................................................................18
IV
Slika 3.25: Izhodišča za postavljanje elementov uporabniškega vmesnika.........................19
Slika 3.26: Primer hierarhije sestave uporabniškega vmesnika in njegov predogled..........20
Slika 4.1: Začetni meni igre.................................................................................................21
Slika 4.2: Primer začasno zaustavljene igre.........................................................................22
Slika 4.3: Primer začetne faze igre.......................................................................................23
Slika 4.4: Lokostrelec in vitez..............................................................................................23
Slika 4.5: Bojevniki okostnjaki............................................................................................24
Slika 4.6: Lokostrelci okostnjaki..........................................................................................24
Slika 4.7: Bojevniki »zombiji«.............................................................................................24
Slika 4.8: Primer bitke v končni fazi igre.............................................................................25
Slika 4.9: Napad zadnjega in glavnega sovražnika..............................................................26
Slika 4.10: Meni, ki se pojavi, ko uspešno končamo igro....................................................26
V
1. UVOD
Industrija razvoja iger je v zadnjih dvajsetih letih doživela neverjeten razcvet ter s tem
odprla veliko možnosti za zaslužek in ustvarjanje kvalitetnih zabavnih vsebin. Obstaja
veliko žanrov iger, ki so že ustaljeni, nekatere igre pa so tako posebne, da se jih ne da
uvrstiti v točno določeni žanr. Želje uporabnikov se neprestano spreminjajo, orodja za
razvoj in znanja pa so vedno bolj prosto dostopna. Zaradi tega se pojavlja vedno več
razvijalcev, posameznikov in manjših ekip, kar še dodatno prispeva k raznolikosti iger.
V diplomskem delu smo želeli preizkusiti pridobljeno znanje in pridobiti nove izkušnje pri
samostojnem razvijanju iger. Ta panoga razvijanja je še posebej zanimiva, saj sta
kreativnost in iznajdljivost v primeru samostojnega dela posebej pomembna.
Razvoj iger je izjemno multidisciplinaren postopek, zaradi česar je lahko samostojno
razvijanje iger zelo zahtevno. Med izdelavo diplomskega dela smo morali poskrbeti za
osnovno idejo igre, 3D modele, glasbo, zvočne efekte; raziskati in primerjati različna
orodja za razvoj; ustvariti okolje igre; si zamisliti zgradbe in vrste terena; sprogramirati
logiko, ki bo skrbela za gradnjo zgradb, pridobivanje surovin, gradnjo cest, bojevanje ter
izdelati uporabniški vmesnik. Morali smo razviti tudi primerno težavnost.
Igra, ki smo si jo zamislili, je postavljena v izmišljeni srednjeveški svet, kjer je igralec
vodja kraljestva. S pametnim in hitrim postavljanjem zgradb in cest ter zaposlovanjem
ljudi v pridelovalnih zgradbah si mora igralec zagotoviti dovolj surovin, da lahko najame
vojsko, s katero brani svojo utrdbo pred napadi zlobnih sil. Želeli smo, da bi igra temeljila
na razvijanju ekonomije, ki bi bilo občasno prekinjeno z vojaškimi odločitvami. Naš cilj je
bil ustvariti zanimivo igro za večkratno igranje.
Delovni proces smo poskušali opisati sistematično. Menimo, da ima igra dobro
izoblikovani generator sveta, na katerem temelji preostanek igre, je to tema, ki smo jo
opisali v prvem poglavju o implementaciji igre. Nato smo razložili še implementacijo
ekonomije in bojevanja ter zajeli še vidik uporabnika.
1
2. UPORABLJENA ORODJA
2.1. Grafično oblikovanje
Pri izdelavi diplomske naloge smo uporabili orodja, ki so na voljo brezplačno. Z izjemo
modelov delavcev, vojakov in sovražnikov, smo vse 3D modele izdelali sami. Pri tem smo
uporabili brezplačen program Blender [1], s katerim nismo imeli veliko predhodnih
izkušenj. Ker smo za igro potrebovali zelo preproste oblike, smo se tega lahko s pomočjo
poučnih videov na spletni strani https://youtube.com zelo hitro naučili. Primer
uporabniškega vmesnika in dela v programu Blender je viden na sliki 2.1.
2.2. Glasba
Glasbe in zvočnih učinkov, nismo izdelali sami. Zvočne učinke smo pridobili s spletnih
strani, ki imajo zbirke prosto dostopnih zvokov. Seznam zvočnih učinkov, ki smo jih
uporabili pri razvoju igre, se nahaja v prilogi A. Glasbo je izdelal Adrian von Ziegler,
2
Slika 2.1: Primer dela v programu Blender
švicarski skladatelj fantazijske instrumentalne glasbe, ki dovoljuje brezplačno uporabo
svoje glasbe v nekomercialnih projektih [2].
2.3. Programiranje
Za izdelavo same igre smo uporabili brezplačno različico programa Unity [3]. Unity je
orodje za izdelavo iger, ki omogoča razvoj za skoraj vse pomembnejše platforme. Usmerili
smo se v izdelavo za platforme PC, Mac in Linux, podprte pa so med drugimi tudi iOS,
Android, Windows Phone, Blackberry, Xbox, PlayStation, Wii, da pa se narediti tudi igre,
ki se jih poganja v spletnih brskalnikih. Za pisanje kode sta v Unity na voljo programska
jezika JavaScript in C#, ki smo ga izbrali. Program Unity smo izbrali, ker smo imeli z njim
že nekaj izkušenj, tako ni bilo potrebnega veliko dodatnega raziskovanja.
Razvijanje v programu Unity poteka na tak način, da večino časa oblikujemo neko sceno.
To je navidezno okolje, ki ga napolnimo z vsemi objekti igre, kateri so v določenem
trenutku v uporabi. Scen je lahko več: scena za glavni meni; scena za igro z lahkimi
nastavitvami; scena za meni, ki se pojavi, ko igro izgubiš ipd. V vsaki sceni imamo posebej
določeno hierarhijo objektov igre. Ti objekti so lahko katerikoli od 3D modelov, ki se
prikazujejo v svetu, virov svetlobe ali zvoka, nosilcev kamere, skozi katero uporabnik vidi
svet igre, nevidnih sten in podobno. Primer scene s hierarhijo objektov in ostalih
elementov uporabniškega vmesnika Unity je viden na sliki 2.2.
Ko so ustvarjeni, imajo objekti igre v Unity izmed pomembnejših lastnosti le ime in
položaj. To osnovo lahko nadgrajujemo z dodajanjem različnih elementov, s katerimi
lahko objekt popolnoma prilagodimo našim potrebam. Med drugim jim lahko dodamo 3D
modele, nevidne mreže za zaznavanje trkov, jih določimo kot predmete na katere vpliva
gravitacija in imajo svojo maso, dodamo pa jim lahko tudi ročno napisane skripte, napisane
v programskem jeziku C# ali JavaScript. V teh skriptah objektu določamo dodatne
lastnosti ter jim preko funkcij, ki se izvajajo neprestano ali ob specifičnih pogojih, dodamo
še več funkcionalnosti.
3
Tako definirane objekte lahko shranimo kot predloge, ki so v Unity poimenovane Prefab. S
pomočjo predlog lahko naredimo poljubno mnogo kopij objektov, hkrati pa lahko te
predloge uporabljamo v skriptah, saj lahko objekte s točno določenimi lastnosti ustvarimo
tudi med delovanjem igre (npr. urimo vojake ali gradimo zgradbe). Ko pritisnemo na gumb
za urjenje vojaka, se ustvari objekt vojaka, ki ima vse lastnosti shranjene v svoji predlogi.
Te lastnosti so 3D model z animacijami, mreža za zaznavanje trkov, sposobnost iskanja
poti, skripta z logiko za bojevanje in podobno. Na sliki 2.3 vidimo primer teh lastnosti za
predlogo lokostrelcev.
4
Slika 2.2: Primer razvijalnega okolja Unity
Za brskanje med vsemi predlogami, 3D modeli, zvoki, teksturami, skriptami in ostalimi
viri za razvoj igre, je v Unity na voljo pregleden način brskanja po datotekah projekta, ki
smo jih uvozili ali ustvarili. Po privzetih nastavitvah se to nahaja na dnu ekrana in je
razdeljeno na dva dela. Na levi strani se nahaja hierarhični prikaz vseh datotek, na desni pa
imamo na voljo brskanje po oknih, kot smo ga vajeni iz uporabe operacijskih sistemov
Windows, Ubuntu ali MacOS (slika 2.4).
5
Slika 2.3:Primer nekaterih lastnosti, ki določajo predlogo lokostrelcev
Slika 2.4: Prikaz datotek projekta v programu Unity
Za lažje razumevanje elementov, ki sestavljajo program Unity, je na voljo veliko spletnih
virov za učenje [4] in pregledna dokumentacija vseh razredov, ki jih Unity ponuja. Na
spletni strani programa Unity lahko najdemo obsežen katalog funkcionalnosti s
sistematičnimi opisi delovanja, uporabe ter praktičnimi primeri [5].
6
3. IMPLEMENTACIJA IGRE
3.1. Generiranje sveta
Prva stvar, ki smo jo potrebovali, je bilo okolje, v katerem se bo vse dogajalo. Lahko bi
ročno sestavili statičen svet, vendar smo želeli, da bi bil svet vsakič drugačen, saj bi le tako
bila igra zanimiva za večkratno igranje.
Najprej smo izdelali sestavne dele sveta. Ker je svet sestavljen iz šestkotnih oblik, je bilo
za osnovne gradnike dovolj, da naredimo en model ter na njem uporabimo različne
teksture. Tako smo izdelali nekaj gradnikov: travo, skalo, skalo s snegom, zlato in vodo.
Nato smo posebej izdelali še teksture, model drevesa ter modele majhnih okrasnih
elementov (rož in lokvanjev). Te osnovne gradnike lahko vidimo na slikah od 3.1 do 3.6.
7
Slika 3.2: Osnovni gradnik skala
Slika 3.3: Osnovni gradnikskala s snegom
Slika 3.1: Osnovni gradnik trava
Slika 3.4: Osnovni gradnik voda
V nadaljevanju smo se lotili pisanja skripte, ki iz osnovnih gradnikov zgradi naključni svet.
Tega smo se lotili tako, da smo najprej določili velikost sveta ter ustvarili ravno travnato
ploskev. To ploskev smo nato razdelili na manjše sektorje, ki jim je generator sveta nato
določil naključni tip terena.
Vrste terena so ravnina, nizka planota, visoka planota, gora in jezero. Za vsako vrsto terena
smo pripravili funkcijo, ki je v sektorju izbrala poljubno točko ter okoli tiste točke ustrezno
spremenila ter dodala gradnike. Ker funkcije različnih vrst terena vedno vzamejo poljubno
točko v sektorju ter gradijo krožno okoli te točke, se lahko zgodi, da spremenijo tudi obliko
sosednjega sektorja. Zgodi se lahko tudi to, da se dva takšna kroga prekrijeta in dobimo
zelo zanimive oblike, kot so npr. nizka planota, ki se nenadoma dvigne v goro, ali goro, ki
je na eni strani odsekana in se spusti v jezero.
Če se generator odloči, da bo nekje ravnina, se tam z neko verjetnostjo ustvari rudnik zlata
ali kamnolom, gozdovi pa se lahko pojavijo na vseh vrstah terena. Za vse to je zelo
pomembna velikost sektorjev. Če so sektorji veliki, je možnost prekrivanja terenov zelo
majhna, če pa so sektorji manjši, je prekrivanja veliko več in svetovi so veliko bolj
razgibani ter zanimivi. Ta razlika je dobro vidna na slikah 3.7 in 3.8.
8
Slika 3.5: Osnovni gradnik zlato Slika 3.6: Osnovni gradnik drevo
Generator je pripravljen tako, da lahko veliko stvari zelo hitro prilagajamo kar preko
programa Unity, ne da bi morali iti nazaj v kodo ter tam spreminjati vrednosti(slika 3.9).
Na tak način lahko spreminjamo velikost sveta, velikost sektorjev, verjetnost pojavljanja za
vsako vrsto terena, gozdove, rudnike, rože in lokvanje.
9
Slika 3.8: Primer sveta, ko so sektorji majhni
Slika 3.7: Primer sveta, ko so sektorji veliki
Za shranjevanje podatkov, ki določajo svet igre, smo ustvarili nov razred ter ga
poimenovali »mapFragment«, kar ponazarja košček sveta. Svet si lahko predstavljano kot
dvorazsežno polje teh koščkov. Lastnosti, ki jih koščki določajo, so: koordinate, višina,
vrsta osnovnega gradnika; kateri kos ceste se na koščku nahaja; mesto drevesa, rože,
lokvanja ali delavca; ali je mesto primerno za gradnjo. Prvotno se celotno polje zapolni s
koščki sveta, ki imajo višino 0, osnovni gradnik travo, so zazidljivi in imajo točno
določene koordinate, ostale lastnosti pa so nedoločene. Med generiranjem sveta nato
funkcije gradnje različnih terenov tem koščkom sveta spreminjajo vrednosti višine in vrsto
osnovnega gradnika, po potrebi pa tudi druge lastnosti (npr. zazidljivost, pojavitev drevesa,
vode, rudnika).
3.2. Ekonomija
Na ekonomijo v igri vpliva več stvari. Na voljo so surovine hrana, les, kamen in zlato. Za
pridelavo hrane moramo ustvariti polje, ostale surovine pa lahko pridelujemo tako, da
postavimo ustrezne zgradbe blizu nahajališč surovin. S surovinami lahko v primeru
pomanjkanja trgujemo na tržnici, kar je včasih celo nujno potrebno za uspešno končano
igro. Za najemanje vojske potrebujemo zlato, ki ga je za pridelavo najmanj na voljo.
10
Slika 3.9: Praktično dostopne spremenljivke generatorja sveta
Na voljo je več različnih zgradb, ki so prikazane na slikah od 3.10 do 3.16. Glavna je
mestna hiša, ki se za razliko od ostalih zgradb vedno avtomatsko zgradi do konca. Za vse
ostale zgradbe pa velja, da morajo biti s cesto povezane z mestno hišo, preden se njihova
gradnja sploh prične.
Gradnja zgradb deluje tako, da je povezano delovanje skripte za gradnjo z gumbi
uporabniškega vmesnika. Vedno, ko uporabnik klikne na gumb za gradnjo kakšne zgradbe,
se v skripti za gradnjo, stanje spremeni iz privzetega v stanje poteka gradnje. Primernost
11
Slika 3.10: Mestna hiša Slika 3.11: Majhno polje Slika 3.12: Veliko polje
Slika 3.14: Podoba zgradb med gradnjoSlika 3.13: Stanovanjskahiša
Slika 3.15: Zgradbe za pridelavo lesa, kamenja in zlataSlika 3.16: Tržnica
lokacije za gradnjo se ugotavlja s sprotnim računanjem položaja pod miškinim kazalcem,
ki ugotavlja, ali je na danem mestu dovolj zazidljivih kosov zemlje z isto višino. Iskanje
prostora za gradnjo je uporabniku olajšano, saj je v igri velikost želene stavbe vizualno
prikazana na mestu, nad katerim je trenutno miškin kazalec (slika 3.17). Lokacija
gradbišča se s premikanjem miške posodablja in gradbišče na neprimernih lokacijah izgine.
Po izbiri primerne lokacije se preveri, če imamo za gradnjo sploh dovolj surovin. Če je
surovin dovolj, se na danem mestu postavi gradbišče. Z izjemo mestne hiše, ki se po nekaj
sekundah zgradi, se gradnja ostalih zgradb prične šele, ko jih povežemo s cestnim
omrežjem, ki se že predhodno stika z mestno hišo. Vsako gradbišče privzeto dobi kos
ceste, ki določa stran, s katere se mora dotikati cestnega omrežja.
Pridelava surovin se deli v dve skupini. Pri pridelavi hrane je velikost pridelovalne
površine polja vnaprej točno določena. Zgradimo lahko majhno ali veliko polje. Zgradbe
za pridelavo lesa, kamenja in zlata pa ob svojem nastanku preverijo okolico in ugotovijo
količino primernih surovin v okolici. Od tega je odvisno število delavcev v pridelovalni
zgradbi. V kamnolomu se tako lahko zgodi, da ne moremo zaposliti nič delavcev, če v
bližini ni kamenja. Na polju je število maksimalnih delovnih mest vedno enako.
Pomembno vlogo igrajo tudi ceste. Njihova najpomembnejša vloga je povezovanje zgradb.
12
Slika 3.17: Primer iskanja lokacije za gradnjo
Predstavljajo pa tudi pogoj za nastanek zgradb in vplivajo na hitrost pridelave surovin. Za
vsak košček ceste in vsako zgradbo se izračuna oddaljenost od mestne hiše. Bolj je
pridelovalna zgradba oddaljena od mestne hiše, počasnejša je pridelava surovin zaradi časa
potrebnega za transport. Za transport surovin je nujno, da ceste ostanejo povezane in se jih
ne uničuje. Če že dokončani zgradbi kasneje prekinemo cestno povezavo, ne bo obratovala
do ponovne vzpostavitve povezave.
Pri dodajanju cestnih odsekov se oddaljenost preračuna glede na oddaljenost sosednjih
odsekov. Dva sosednja cestna odseka sta nepovezana, če je višinska razlika med njima
večja od 1.
13
14
Slika 3.18: Primer računanja oddaljenosti od mestne hiše
Slika 3.19: Prikaz preračunavanja oddaljenosti od mestne hiše v primeru dodajanja cestnihodsekov (primerjaj s sliko 3.18)
Za ekonomijo so zelo pomembni predvsem delavci. V vsaki pridelovalni zgradbi imamo
določeno maksimalno število zaposlenih delavcev, hitrost pridelave surovin pa je odvisna
od trenutnega števila zaposlenih. Pri ljudeh pa je potrebno upoštevati, da potrebujejo mesto
za bivanje (stanovanjske hiše) in hrano. Na začetku je določeno maksimalno število ljudi
70. Ko to število z zaposlovanjem in urjenjem vojakov dosežemo, moramo zgraditi
dodatne hiše, da se poveča maksimalno število ljudi, ki jih ekonomija podpira. Hrano se v
igri primarno uporablja za plačilo delavcem. Več ljudi imaš, več hrane se porablja.
Kadar je določenih surovin na voljo zelo malo, se lahko igralci obrnejo na tržnico (slika
3.20). Tržnica je posebna zgradba, v kateri lahko katerokoli surovino zamenjamo za zlato,
z zlatom pa potem kupimo katerokoli drugo surovino. Menjalna razmerja so različna za
različne surovine. Razlike pa se pojavljajo tudi pri prodajnih in nakupnih vrednostih.
3.3. Bojevanje
V igri se bojevanje dogaja na drugačni, novi lokaciji. Orodje Unity NavMesh olajša
implementacijo premikanja ljudi v igri, saj znajo najti najkrajšo pot do neke točke in se pri
tem izogniti oviram na poti. Ker je možno Unity NavMesh uporabiti samo na statičnih,
vnaprej pripravljenih okoljih, smo morali bojevanje postaviti na neko statično lokacijo.
15
Slika 3.20: Tržnica in njen uporabniški vmesnik
Da lahko program Unity zgradi navigacijsko mrežo, moramo vsem objektom določiti:
statičnost, omogočiti hojo skozi njih ali skoke nanje. Igralnim figuram moramo določiti
polmer, višino, največji kot vzpona ter največjo višino stopnice, po kateri se zmore
vzpenjati. Te nastavitve lahko vidimo na sliki 3.21. Polmer je pomemben, ko drevesa
rastejo blizu skupaj. Če je polmer uporabnika navigacijske mreže prevelik, bo moral najti
pot okoli dreves, če pa je dovolj majhen, bo lahko šel med drevesi. Primer zgrajene
navigacijske mreže je prikazan na sliki 3.22.
16
Slika 3.21: Nastavitve za izdelavo navigacijske mreže
Slika 3.22: Z modro barvo je prikazana zgrajena navigacijska mreža
Kljub temu, da za svet bojevanja nismo uporabili svojega generatorja sveta, pa smo za
ročno gradnjo lahko uporabili svoje osnovne gradnike (travo in drevesa). Da smo stvar
nekoliko popestrili, smo spremenili barve trave in dreves – nastal je rdeči svet.
Z zlatom, ki ga pridelamo z ekonomijo, lahko na lokaciji bojevanja kupujemo vojake, s
katerimi je treba 15 minut braniti svojo utrdbo. Vojaki in sovražniki delujejo na enak
način. Njihovo osnovno stanje je, da stojijo na mestu ter čakajo na ukaz za premik.
Sovražniki dobijo ukaz za premik takoj ko so ustvarjeni, igra pa izbira med tremi
različnimi potmi do igralčeve utrdbe.
Ko vojaki dobijo ukaz za premik, z uporabo navigacijske mreže izračunajo najbližjo pot do
cilja, ter se začnejo premikati proti njemu. V majhnem krogu okoli sebe neprestano
preverjajo prisotnost sovražnika. Ko zaznajo prvega sovražnika, si shranijo prvotni cilj ter
se začnejo premikati proti lokaciji zaznanega sovražnika. Ko sta nasprotnika dovolj blizu,
si z upoštevanjem hitrosti napada ter moči obeh bojevnikov izmenjujeta udarce, dokler
eden ne umre. Preživeli preveri, če je v bližini še kakšen sovražnik. Če sovražnika ni,
nadaljuje pot proti svojemu prvotnemu cilju.
Bojevniki imajo okrog sebe nevidno mrežo za zaznavanje trkov, ki sproži dogodek ob stiku
s podobno mrežo nekega drugega vira. Velikosti mrež se močno razlikujejo glede na to
vrsto, ali gre vojaka lokostrelca ali za viteza (slika 3.23). Lokostrelec potrebuje mrežo z
večjim polmerom, saj mora prej zaznati sovražnike in jih začeti napadati.
17
Slika 3.23: Primerjava velikosti mreže za zaznavanje trkov lokostrelca in viteza
Svojim vojakom lahko dajemo ukaze za posamično premikanje, lahko pa jih označimo tudi
več naenkrat ter jim izdamo skupni ukaz za premik (slika 3.24).
Vojaki in sovražniki imajo lastnosti, ki vplivajo na bojevanje: količina življenja, moč
oklepa, verjetnost umikanja napadu, hitrost napada, moč napada in hitrost premikanja.
Bojevniki se razlikujejo tudi glede na razdaljo bojevanja (npr. vitezi ali lokostrelci).
Za razliko od 3D modelov gradnikov terena in zgradb so oblike ljudi in pošasti veliko bolj
kompleksne, hkrati pa morajo imeti tudi animacije za premikanje, bojevanje, sekanje
dreves in podobno. Ker je bilo naše znanje 3D modeliranja in izdelave animacij omejeno,
bi morali v te modele in animacije vložiti veliko časa, rezultat pa verjetno ne bi bil zelo
kakovosten. Iz tega razloga smo v spletni trgovini Unity Asset Store [6], kjer je na voljo
veliko različnih virov za razvijanje iger (npr. 3D modeli, teksture, animacije, zvočni
učinki) kupili paket modelov, ki je med drugim vključeval modele ljudi z animacijami, ki
sem jih uporabil za delavce, vojake in sovražnike [7].
3.4. Uporabniški vmesnik
Za izdelavo uporabniškega vmesnika je v programu Unity kar dobro poskrbljeno in
18
Slika 3.24: Izbiranje več vojakov hkrati
postopek ni pretirano zapleten. Kot osnovo se naredi platno, na katerega se dodaja različne
elemente uporabniškega vmesnika (npr. tekst, slike, gumbi, vnosna polja, spustni meni).
Tem elementom položaj nastavljamo tako, da jim najprej določimo izhodišče, potem pa
lahko ročno prilagajamo odmik od tega izhodišča. Izhodišča, ki so na voljo, so vidna na
sliki 3.25. Tekstovnim elementom lahko natančno določamo velikost in obliko pisave,
dostop do tekstovnih vrednosti pa je omogočen tudi preko skript.
Elementi uporabniškega vmesnika imajo lastnost vidnosti. Le-to smo uporabili tako, da
smo razdelili svoj uporabniški vmesnik na statični del (vsebuje npr. prikaz količine
surovin) in na dinamični del, ki se spreminja glede na uporabnikova dejanja. To je najbolj
očitno v spodnjem desnem kotu ekrana, kjer se uporabniški vmesnik spreminja glede na
uporabnikove klike. Prvotno stanje je, da so prikazane zgradbe, ki so na voljo za gradnjo.
Če kliknemo na kakšno pridelovalno zgradbo, se ta del vmesnika spremeni v meni
označene zgradbe in imamo na voljo zaposlovanje ali odpuščanje delavcev za tisto
zgradbo.
Če kliknemo na gumb v zgornjem desnem kotu, ki nas popelje na bojno polje, se meni za
zgradbe in zaposlovanje spet spremeni ter prikazuje možnosti za urjenje vojske. Lastnost
vidnosti smo uporabili tudi za meni, ki se pojavi čez celoten zaslon, ko s tipko ESC
začasno ustavimo igro. Na sliki 3.26 je vse to dobro vidno, saj je na dinamičnih delih
uporabniškega vmesnika vidno prekrivanje več elementov. Na levi strani te slike pa lahko
vidimo hierarhično ureditev elementov uporabniškega vmesnika.
19
Slika 3.25: Izhodišča za postavljanje elementov uporabniškega vmesnika
3.5. Glasba in zvočni učinki
Večina uspešnih iger ima v ozadju glasbo, ki poskrbi za to, da uporabniki globlje doživijo
vsebino igre. Ne smejo pa manjkati tudi zvočni učinki. Ker z ustvarjanjem glasbe nismo
imeli popolnoma nobenih izkušenj, smo pomanjkanje znanja in talenta glasbenega
ustvarjanja premostili tako, da smo poiskali prosto dostopne alternative.
Za glasbo, ki se v igri predvaja v ozadju smo uporabili glasbo švicarskega skladatelja
fantazijske instrumentalne glasbe Adriana von Zieglerja, ki dovoljuje brezplačno uporabo
svoje glasbe v nekomercialnih projektih. Zvočne učinke, ki so uporabljeni grajenje zgradb,
cest, umiraje vojakov in udarce z mečem, smo našli na spletni strani freesound.org.
Prenešene zvočne datoteke smo najprej z uporabo programa “QuickTime Player” obrezali,
tako so ostali le zaželeni odseki, nato pa smo jih z uporabo programa iTunes pretvorili v
zvočni zapis .wav.
Uporaba zvoka v Unity poteka tako, da na objekt igre dodamo vir zvoka, ki mu nato ročno
ali preko skripte določimo pripadajočo zvočno datoteko. Če vir zvoka manipuliramo preko
skripte, imamo možnost natančneje določati lastnost predvajanja in mu lahko na primer
določimo poljubne prehode menjavanje med različnimi pesmimi, kar smo naredili za
glasbo v ozadju igre. Lahko pa zvočni vir v osnovi pustimo prazen ter v skripti določimo,
da le ob posebnih dogodkih predvaja kratek zvok (npr. ko zgradimo kakšno zgradbo ali ko
kakšen vojak umre).
20
Slika 3.26: Primer hierarhije sestave uporabniškega vmesnika in njegov predogled
4. DELOVANJE IGRE
Ko igro zaženemo se prikaže glavni meni, ki uporabniku ponuja tri načine igranja. Kot je
vidno na sliki 4.1, so na izbiro lahek način, oteženi način ter način gradnje, kjer ni
sovražnikov in časovne omejitve. Razlika med lahkim in težkim načinom je v številu
napadov sovražnikov ter v ceni in moči tvojih vojakov. V lahkem načinu ima igralec na
voljo tudi več začetnih surovin.
Med igro lahko igralec potek igre začasno ustavi s pritiskom tipke ESC. Ko se to zgodi, se
vse dogajanje ustavi, igralec pa dobi na voljo meni z izbiro da zapusti trenutno igro in se
vrne v glavni meni igre, da popolnoma zapre igro ali pa nadaljuje z igranjem. To
zaustavljeno stanje igre je prikazano na sliki 4.2.
21
Slika 4.1: Začetni meni igre
4.1. Ekonomija
Igro vedno začnemo z razvijanjem ekonomije. Ker je mestna hiša edina zgradba, ki se
gradi samostojno, jo moramo postaviti najprej. Nato poskrbimo za pridelavo surovin, zato
zgradimo zgradbo za pridelavo lesa, kamenja in polje. Za normalno gospodarstvo so te tri
surovine nujno potrebne, saj kamen in les potrebujemo za gradnjo novih zgradb, hrano pa
za urjenje delavcev. Igralci imajo poleg gradnje zgradb in cest ter urjenja delavcev tudi
možnost uničevanja stvari. Uničijo lahko zgradbe, dele cest ali drevesa, ki jih trenutno ne
potrebujejo.
Ko je gospodarska osnova urejena, je igralčevo kraljestvo podobno podobi na sliki 4.3.
Nadaljevanje igre zaznamuje razvoj ekonomije, da lahko s prodajo drugih surovin na
tržnici in z neposredno pridelavo pridelamo dovolj zlata, hkrati pa smo pozorni na napade
sovražnikov in urimo vojake.
22
Slika 4.2: Primer začasno zaustavljene igre
4.2. Bojevanje
Za boj imamo na voljo dve vrsti vojakov. To so lokostrelci in vitezi, ki jih vidimo na sliki
4.4. Najamemo jih lahko z zlatom, ki ga pridelamo s svojo ekonomijo. Cene bojevnikov pa
se razlikujejo glede na način igre. Vedno pa velja, da so vitezi dražji od lokostrelcev. Ko
najamemo vojaka, ga lahko nadzorujemo z levim miškinim gumbom, ukaz za premik pa
mu posredujemo s klikom desnega gumba na miški. Če hočemo, da napade sovražnika, ne
kliknemo na sovražnika, ampak izdamo ukaz za premik v bližino sovražnika. Ko bo vojak
sovražniku dovolj blizu, ga bo sam zaznal in napadel.
23
Slika 4.3: Primer začetne faze igre
Slika 4.4: Lokostrelec in vitez
Sovražniki v igri so »zombiji« in okostnjaki, ki pa se ravno tako delijo na lokostrelce in
borce na kratke razdalje. Napadajo v valovih intervalu dveh minutah. V lahkem načinu
igranja so v vsakem intervalu štirje napadalci, v težjem načinu pa jih je šest. Težavnost se
stopnjuje, saj so sovražniki z vsakim valom močnejši. Povečuje se jim količina življenja,
oklepa, hitrost in moč napada. Spreminjajo pa se tudi vizualno, saj imajo vedno boljšo
opremo (To prikazujejo slike od 4.5 do 4.7.). Po pretečenih 15 minutah, se prične zadnja
stopnja igre. Napade te velikanski »zombi«, ki je veliko močnejši od prejšnjih napadalcev.
Po zmagi nad njim, je igra končana.
24
Slika 4.6: Lokostrelci okostnjaki
Slika 4.5: Bojevniki okostnjaki
Slika 4.7: Bojevniki »zombiji«
Igro izgubimo, če nam sovražniki uničijo utrdbo. Utrdba ima nad seboj napis o višini
škode, ki jo še lahko utrpi pred uničenjem. Ko se sovražniki nahajajo v bližini utrdbe, ki je
v igri vidna kot krog, jo počasi uničujejo. Hitrost uničevanja je odvisna od njihove moči
napada, vseeno pa lahko utrdba dolgo zdrži, tako imamo možnost taktičnega umika za
zbiranje večje vojske. S tem sicer delno žrtvujemo svojo utrdbo, ampak povečamo možnost
za uničenje napadalcev. Če proti koncu igre igralec še nima velike vojske, bo igro zelo
težko uspešno končal, saj so za razliko od naših vojakov sovražniki vedno močnejši in
potrebujemo za končno zmago številčno premoč. Takšna situacija je prikazana na sliki 4.8.
25
Slika 4.8: Primer bitke v končni fazi igre
26
Slika 4.9: Napad zadnjega in glavnega sovražnika
Slika 4.10: Meni, ki se pojavi, ko uspešno končamo igro
5. SKLEP
Strateško igro nam je uspelo končati na želeni način. Težavnost je dobro zastavljena –
lahek način je možno igrati sproščeno, težji način pa je za povprečnega igralca kar velik
izziv. To smo testirali z večkratnim preigravanjem, preizkusili pa so jo tudi nekateri
znanci, ki so imeli sprva velike težave z uspešnim končanjem igre v težkem načinu.
Z uporabo razvojnega orodja Unity smo bili zelo zadovoljni. Delo v njem je intuitivno,
zabavno, za veliko pomembnih stvari pa program nudi poenostavljene ali pa čisto
avtomatizirane rešitve. Primer tega je prilagodljivost na velikost ekranov. Ko igro
izvozimo, ter jo na ciljnem računalniku poženemo, imamo na razpolago več primernih
nastavitev ločljivosti. Samodejno je poskrbljeno tudi za izbiro nastavitev grafične kvalitete.
Pri tem se upošteva kvaliteta senc, razdalja prikazovanja objektov ipd.
Med razvijanjem smo se naučili ogromno novih stvari. Če bi se projekta lotili še enkrat, bi
nekatere stvari reševali na drugačen način, saj imamo zdaj več izkušenj in se bolje
zavedamo tehničnih pasti ter pomena premišljenega predhodnega načrtovanja. Slab primer
je izvajanje preveč stvari v funkcijah posodabljanja oz. funkcijah objektov v igri, ki se
izvajajo neprestano. Iz tega razloga se je delovanje igre močno upočasnilo, ko je bilo na
bojišču veliko vojakov. To se sicer še vedno lahko zgodi na strojno šibkejših računalnikih,
vendar pa je trenutno stanje po popravkih veliko boljše. Samostojno razvijanje celotne igre
smo si pred začetkom dela predstavljali kot velik osebni izziv. To delo nam je bilo v
užitek, saj je zahtevalo res veliko iznajdljivosti in ustvarjalnosti. To je nekaj s čimer se v
prihodnosti vsekakor želimo še ukvarjati.
Možne nadgradnje za igro bi bile: omogočanje bojevanja na terenu za razvoj ekonomije;
vpeljava dodatnih vrst vojaških enot (konjenice in katapultov); lahko pa bi se uvedlo tudi
igranje med igralci preko interneta.
27
6. SEZNAM UPORABLJENIH VIROV
[1] Blender. Dostopno na: https://www.blender.org/download/ [7. 9. 2015]
[2] 2 Hours of Fantasy Music by Adrian von Ziegler. Dostopno na:
https://www.youtube.com/watch?v=4bhceZgdWFM [18. 11. 2015]
[3] Unity Technologies. Dostopno na: https://unity3d.com/get-unity [10. 9. 2015]
[4] Learn with Unity, Unity Technologies. Dostopno na: https://unity3d.com/learn [10.
9. 2015]
[5] Unity Manual, Unity Technologies. Dostopno na:
http://docs.unity3d.com/Manual/index.html [10. 9. 2015]
[6] Unity Asset Store. Dostopno na: https://www.assetstore.unity3d.com/en/ [15. 9.
2015]
[7] Full Fantasy Game Set, Unity Asset Store. Dostopno na:
https://www.assetstore.unity3d.com/en/#!/content/13594 [15. 9. 2015]
28
7. Priloga A
Pri razvoju igre smo uporabili naslednje prosto dostopne zvočne vire, katerih uporaba v
nekomercialne namene je brezplačna.
[1] Woman walking fast on pavement zvočni učinek. Dostopno na:
https://www.freesound.org/people/bulbastre/sounds/103974/ [17. 11. 2015]
[2] Silencyo_COUNTRY_DAY_Sickle_Wheat zvočni učinek. Dostopno na:
https://www.freesound.org/people/silencyo/sounds/81721/ [17. 11. 2015]
[3] Chopping logs in a shed zvočni učinek. Dostopno na:
https://www.freesound.org/people/Islabonita/sounds/220951/ [17. 11. 2015]
[4] Stone falls and break low pitch zvočni učinek. Dostopno na:
https://www.freesound.org/people/SoundCollectah/sounds/109360/ [17. 11. 2015]
[5] Sao Paolo Market zvočni učinek. Dostopno na:
https://www.freesound.org/people/johnnytal/sounds/168440/ [17. 11. 2015]
[6] Many_coins zvočni učinek. Dostopno na: https://www.freesound.org/people/Taira
%20Komori/sounds/213698/ [17. 11. 2015]
[7] Distant horns zvočni učinek. Dostopno na:
https://www.freesound.org/people/DANMITCH3LL/sounds/218488/ [17. 11. 2015]
[8] MedievalCombatLoop zvočni učinek. Dostopno na:
https://www.freesound.org/people/Yap_Audio_Production/sounds/218522/ [17. 11.
2015]
[9] Arrow zvočni učinek. Dostopno na:
https://www.freesound.org/people/EverHeat/sounds/205563/ [17. 11. 2015]
[10] Slashkut zvočni učinek. Dostopno na:
https://www.freesound.org/people/Abyssmal/sounds/35213/ [17. 11. 2015]
[11] Tearing_paper_14 zvočni učinek. Dostopno na:
https://www.freesound.org/people/Dymewiz/sounds/111118/ [17. 11. 2015]
29
[12] Death 5 zvočni učinek. Dostopno na:
https://www.freesound.org/people/manuts/sounds/319998/ [17. 11. 2015]
[13] Fanfare 1 zvočni učinek. Dostopno na:
https://www.freesound.org/people/primordiality/sounds/78822/ [17. 11. 2015]
[14] Slow sad tones zvočni učinek. Dostopno na: https://www.freesound.org/people/TJ
%20Mothy/sounds/92734/ [17. 11. 2015]
30