IOS%PELINLUOMINENUNITY% PELIMOOTTORILLA TuomoStamblewski Opinnäytetyö Huhtikuu2014 Ohjelmistotekniikankoulutusohjelma Tekniikanjaliikenteenala
KUVAILULEHTI* Tekijä(t) Stamblewski,Tuomo Julkaisunlaji Opinnäytetyö Päivämäärä 27.04.2014 Sivumäärä 57 Julkaisunkieli Suomi Verkkojulkaisulupa myönnetty (X) Työnnimi IOSHPELINLUOMINENUNITYHPELIMOOTTORILLA Koulutusohjelma Ohjelmistotekniikka Työnohjaaja(t) Mieskolainen,Matti Toimeksiantaja(t) TuotantoyhtiöTasoOy Tiivistelmä OpinnäytetyöntarkoituksenaolitoteuttaamobiilipeliprototyyppiTuotantoyhtiöTasoOy:llekäyttäH enunityhpelimoottoria.pelinsuunnittelujaideointitapahtuiyhdessäyrityksenkanssa.tarkoitukseh naolitehdäprototyyppiyrityksensuunnittelemastamobiilipelistäsekätutkiapelientekemistäiosh alustallekäyttäenunityhpelimoottoria.prototyypinpelihideaolireaaliaikainen3dhverkkopeli,jossa pelaajattaistelevattankeillatoisiaanvastaanyksikerrallaan. OpinnäytetyössäkäsitelläänmobiilipelienjaHlaitteidenhistoriaa,iOSHlaitteita,UnityHpelimoottoria, yleisiämobiilipeliohjelmoinninhaasteitasekäkäydäänläpiprototyypintoteuttamisenerivaiheet. OpinnäytetyössätuleeilmiUnity pelimoottorinrakenne,toimintalogiikkajasenkäyttämäkompoh nenttimalli.opinnäytetyösisältääpaljonsovellettaviaohjelmointiesimerkkejäjaoptimointiratkaisuh ja. TyönteknisentoteutuksenosiossakäydäänläpipelinvalmistusprosessiainasuunnittelustatoteutH tamiseenasti.lisäksiperehdytäänyksityiskohtaisestiunitypelimoottorinominaisuuksiinjamiten eriominaisuuksiavoidaankäyttääeritilanteissa.tämänlisäksikerrotaanmitäkannattaaottaa huomioonmobiilipeliäluodessa,kutenmobiililaitteidenrajattutehoja muistimäärätaierilaiset käskytystavatnäppäintenpuutteenvuoksi. Avainsanat(asiasanat) ios,unity,optimointi,mobiilipeli,pelisuunnittelu,pelimoottori,c# Muuttiedot
DESCRIPTION+ Author(s) Stamblewski,Tuomo Typeofpublication Bachelor s/master sthesis Date 27.04.2014 Pages 57 Language Finnish Permissionforweb publication (X) Title IOSOGAMEDEVELOPMENTWITHUNITYGAMEENGINE DegreeProgramme SoftwareEngineer Tutor(s) Mieskolainen,Matti Assignedby TuotantoyhtiöTasoOy Abstract ThepurposeofthethesiswastocreateamobilegameprototypeforTuotantoyhtiöTasoOyusing theunitygameengine.gamedesignandideationwerecarriedoutwiththecompany.theaimwas tomakeaprototypeofamobilegameaccordingtotheplansthecompanyhadmadeandalso explorewaystoproducegameswithunitygameengineforiosplatform.thegameideaofthe prototypewasarealtime3dmultiplayergame,whereplayersfighteachotherwithtanks. Thisthesisdealswiththehistoryofmobilegamesanddevices,iOSdevicesandUnitygameengine aswellasgeneralmobilegameprogrammingchallengesanddifferentstagesofimplementationof prototypearediscussedinthetext.thethesisexplainsthestructure,logicandcomponentmodelof Unitygameengine.Thethesisalsoincludesapplicableprogrammingexamplesandoptimization solutions. Inthisthesisgameproductionprocessisdiscussedfromdesigntotechnicalimplementation.Details ingameenginefeaturesareexplainedinmoredetailandhowtheycanbeusedindifferent situationsisdiscovered.inaddition,thethesislooksatmattersthathavetobetakenintoaccount whendesigningandimplementingamobilegame. Keywords ios,unity,optimization,gamedesign,gameengine,c# Miscellaneous
1 SISÄLTÖ KÄSITTEET...4 1 Työnlähtökohdat...6 2 Mobiilipelitja@laitteet...6 2.1 Mobiililaitteidenmääritelmä...6 2.2 Mobiililaitteidenhistoria...7 2.3 Mobiililaitteetnykypäivänä...8 2.4 Mobiilipelinmääritelmä...8 2.5 Mobiilipelienhistoria...9 2.6 Mobiilipelitnykypäivänä...9 3 ios@käyttöjärjestelmäja@laitteistot...10 3.1 MikäiOSon?...10 3.2 iosckäyttöjärjestelmäversiohistoria...10 3.3 YleistäiOSClaitteistoista...11 3.4 ioscpuhelimienteknisetominaisuudet...12 3.5 iosctaulutietokoneidenteknisetominaisuudet...12 4 Unity...13 4.1 MikäUnityon?...13 4.2 Historia...14 4.3 MiksiUnity?...15 4.4 UnityEditor...15 4.5 AssetStore...19 4.6 Profiler...20 4.7 Unityntoimintaperiaate...22 4.7.1 Ideologia...22 4.7.2 GameObject...22 4.7.3 Prefab...22
2 4.7.4 Tag...23 4.7.5 Layer...23 4.7.6 Scene...24 4.8 Ulkoisettyökalut...24 4.9 Ohjelmointi...24 5 TankHogs@prototyypintoteutus...29 5.1 MikäTankHogson?...29 5.2 Työskentelymenetelmät...31 5.2.1 Suunnittelu...31 5.2.2 TyölaitteistotjaCvälineet...31 5.2.3 Roolitpelinteossa...32 5.3 Pelinrakenne...33 5.3.1 Kansiorakenne...33 5.3.2 Scenejenrakenne...35 5.4 Audiovisuaalinentoteutus...35 5.4.1 3DCmallit...35 5.4.2 Tekstuuritjamateriaalit...36 5.4.3 Käyttöliittymänsuunnittelu...37 5.4.4 Käyttöliittymäntoteutus...39 5.4.5 Efektit...40 5.4.6 Äänet...40 5.5 Reittihaku...41 5.6 Pelihahmontoiminta...43 5.7 Verkkoratkaisu...44 5.7.1 Suunnittelu...44 5.7.2 PhotonCloudintoimintaperiaate...45 5.7.3 Toteutus...45 5.8 Optimointi...46 5.8.1 Skriptienoptimointi...46 5.8.2 ObjectPool...47
3 5.8.3 Dynamicbatching...48 5.8.4 Staticbatching...49 5.8.5 Tekstuurienpakkaus...49 5.9 Pelitestaus...50 5.9.1 Yleistäpelitestauksesta...50 5.9.2 TankHogsintestaus...50 6 Työntulokset...52 7 Pohdinta...52 LÄHTEET...55 Kuvioluettelo Kuvio1.iOSClaitteidenresoluutiotsuhteutettunatoisiinsa...12 Kuvio2.UnityCeditorinperusnäkymä...16 Kuvio3.UnitynInspectortyökalujapeliobjektinperusrakenne...17 Kuvio4.Unitynkääntämisasetustenvalitsemisnäkymä...18 Kuvio5.Unitynlaatutasojenasetukset...19 Kuvio6.UnityAssetStorenaloitusnäkymä...20 Kuvio7.UnitynsisäänrakennetunProfilerCtyökalunyleisnäkymä...21 Kuvio8.Törmäysmatriisi...23 Kuvio9.TankHogsCpelinlatausruutu...29 Kuvio10.TankHogsCpelinjoukkojenesittelyintro...30 Kuvio11.TankHogsCprojektinkansiorakenne...33 Kuvio12.Esimerkkioptimoiduista3DCmalleista,joistaonpoistettuturhageometria...36 Kuvio13.Läpinäkyvyyttäsisältävätekstuuriatlas...37 Kuvio14.TankHogsCpelintaistelukäyttöliittymä...38 Kuvio15.NGUInmukanatulevaesimerkkiatlas...40 Kuvio16.Navigointiverkonerotoptimoinneilla:Ylempiepätarkkajaalempitarkka...42 Kuvio17.Piirtokomentojentestaamiseenluotutestiscene...49 Taulukkoluettelo Taulukko1.iPhoneCmallienvertailu...12 Taulukko2.iPadCmallienvertailu...13 Taulukko3.MonoBehaviourtyyppistenmetodienkäyttötarkoituksetavattu...25 Taulukko4.Erikoiskansioidenselitys...34
KÄSITTEET 4 3D-MALLI 3DCmalliontietokonegrafiikallaesitettykolmiulotteinenkappale.Yksinkertaisimmillaan3DCmalli esitelläänrautalankamallina. 3G 3GCtermilläviitataanniinsanottuunkolmannensukupolvenmobiiliverkkoon.3Gmahdollistaa suurettiedonsiirtonopeudetmyösmobiililaitteilla. ASSET AssettejaelikäyttömateriaalejaovatUnityCpelimoottorissakaikkiäänet,tekstuurit,materiaalit, 3DCmallitsekämyösskriptit. C# C#onMicrosoftCyhtiönkehittämäohjelmointikieli.NETCympäristöön.C#onvahvastityypitetty kieli.c#onyksikolmestaohjelmointikielestä,jollavoidaanohjelmoidaunitycpelimoottorissa. FPS FramesPerSecondelikuvataajuus.KuvataajuudellatarkoitetaansekunnissaruudullepiirrettäC vienkuvienmäärää. PELIMOOTTORI Pelimoottoritovatvideopelienrunko,joidenpäällepelikehittäjätrakentavatpelinsä.Neyleensä sisältävätrenderointimoottorin,fysiikkamoottorinsekämuitapelientekemiseenliittyviätyökac luja. POLYGON Polygonelimonitahokaskoostuuuseastareunaviivastamuodostaenkaksiulotteisenpinnan3DC avaruuteen.polygonejatoisiinsayhdistämällävoidaanluoda3dcmalleja. PPI PixelsPerInchtarkoittaapikseleidenmääräätuumaakohti.
PROFILER 5 ProfileronUnityProCpelimoottorinmukanatulevaprofilointityökalu,jollasaadaantarkkaatieC toapelinsuorituskyvystäeriosacalueillakutenprosessorilaskennantaifysiikoidensuorittamisesc ta. PROTOTYYPPI Prototyyppejäovatensimmäisettestiversiotkehitettävästäpelistä.NevoivatollamyöspidemC mällevietyjälaajempiatestauksiapelicideasta. RPC RemoteProcedureCallmahdollistaametodienkutsumisenverkonvälityksellätoiseltaclientiltä. MetodipitääerikseenmerkitämahdollistamaanRPCCkutsut. SKYPE SkypeonMicrosoftCyhtiönomistamaVoIPCpalvelu,jokamahdollistaavideopuheluidensoittamiC seninternetinvälityksellä. TEKSTUURI Tekstuurionbittikarttakuvastakoostuvatapetti,jokatoimii3DCmallinpäällelevitettynä.TeksC tuureillasaadaantodenmukaisuutta,monimutkaisuuttajanäyttävyyttäilman,ettätarvitsee kasvattaapolygonimääriä.
6 1 TYÖN LÄHTÖKOHDAT Mobiilipelitovatolleetjovuosienajantärkeääliiketoimintaa.MobiilipelejäpelaavatläC heskaikenikäisetihmiset,minkävuoksisiitäontullutyksitärkeimmistäpelialanbisnesc alueista.opinnäytetyöntavoitteenaolikartoittaamobiilipelienluomisprosessiunityc pelimoottorillasekäyleisetioscpelienkehittämisenongelmatjateknisetrajoitukset. Toteutuksessaonpyrittykäyttämäänilmaisia,avoimenlähdekoodinsekäpilvipalveluiC denratkaisuja,joidenavullasaadaanminimoituataloudellisetriskitjakustannukset. TietoperustanatyöntekemiseentoimiaikaisempikokemusUnityCpelikehittämisestä sekäaikaisempikokemusprojektityöskentelystäitcprojekteissa.senlisäksilöytyilaaja kokemuspeleistäniinkonsoleilla,pc:lläkuinmobiililaitteilla. TyönteoriaosuudessakäsitelläänmobiilipelienjaClaitteidenhistoriaa,perehdytääniOSC käyttöjärjestelmäänjaclaitteisiinsekäkäydäänläpimobiilipelinnykyinenmarkkinatilanc ne.näidenlisäksitutustutaanunitycpelimoottorintoimintaan,rakenteeseenjakäytön perusteisiin. Lopuksityöntoteutusosassakäydäänläpiluodunpelinidea,työskentelymenetelmät,C laitteetjacvälineetsekäyksityiskohtaisestipelintoteutusjaperehdytäänpelissäkäytetc tyihinratkaisuihinjamitäoptimointejakannattaatehdäeriosacalueilla. 2 MOBIILIPELIT JA -LAITTEET 2.1 Mobiililaitteiden määritelmä Mobiililaitteiksimääritelläänyleisestiälypuhelimet,taulutietokoneetjakämmentietokoC neet.mobiililaitteilleyhteistäonuseastiniidenpienikoko,jonkavuoksiniitävoikuljetc taamukana.nykypäivänälypuhelimissaonkosketusnäyttö,jonkaavullalaitettakäskytec tään.laitteissaonmyösgyroskooppi,jokatunnistaalaitteidenasennonjakääntelyn. Laitteidenkasvanutprosessoritehoonmyösmahdollistanutparemmanäänikomentojen
luomisen.myösgpsjakorkealaatuisetkameratovatvakiocominaisuuksia.(mobiledevic ce2014.) 7 2.2 Mobiililaitteidenhistoria Mobiililaitteidenhistoriasaialkunsavuonna1983,jolloinjulkaistiinmaailmanensimC mäinenmatkapuhelinmotoroladynatac8000x.eurooppaanvastavuonna1987virallisc tettiingsmcmobiiliteknologiastandardi,jokamahdollistilaadukkaatpuhelutjatekstic viestienlähettämisen.suomalainennokiajulkaisiensimmäisengsmcmatkapuhelimensa vuonna1992.(mobilephone2014;gsm2014.) Matkapuhelimetyleistyivät1990Cluvullaräjähdysmäisesti.TämämahdollistimobiililaitC teidennopeankehityksen,jajovuonna1994ibmjulkaisiensimmäisenkämmentietokoc neen,jossaolitäydellisetpuhelinominaisuudet.myösnokiajulkaisiomannäkemyksensä kämmentietokoneestakaksivuottamyöhemmin.nokia9000communicatorolipuhelin, jossaoliverkkoselain,faksijasähköpostisekäisokunnollinennäyttöjanäppäimistö. (PDA2014.) 2000Cluvullamatkapuhelimetkehittyivätentistänopeammin.PuhelimiintulivatvärinäyC töt,paremmatsoittoäänet,mp3cäänitiedostojentukisekäenemmäntehoajamuistia. Matkapuhelimienmuotoilukehittyijapuhelimistatehtiinpienempiä.EnsimmäinenkaC merapuhelinjulkaistiinvuosituhannenalussajapanissa(sharpjcsh04:world sfirstever PhoneWithIntegratedCamera2010). Vuonna2003NokiajulkaisiNCGagen,jokaoliensimmäinenpelaamiseentarkoitettupuC helin.puhelineiollutmyyntimenestysnokialle,koskakäyttäjätpitivätpuhelintasuuric kokoisenajajähmeänä.vuottamyöhemminnokiajulkaisipuhelimestaanuudistetun mallinnokiancgageqd:n,jokaolihuomattavastipienempi,muttasamallamenetti ominaisuuksiakutenradionjamusiikkisoittimen.(nokiancgageqdcthesame,butdifc ferent2004.) Vuonna2007Applejulkaisiensimmäisenkosketusnäytöllisenpuhelimen,iPhonen,joka käyttiheidänitsekehittämäänsäiosckäyttöjärjestelmää.tämäoliedistyksellinenpuhec linerityisestitehon,käyttöliittymänjauudenlaisenkommunikointitavantakia.iphoneoli
8 todellasuuriedistysaskelmatkapuhelimissajaolisuunnannäyttäjänykypäivänälypuhec limille.googlenvastaustähänoliandroidckäyttöjärjestelmä,jokajulkaistiinvuonna2008 HTCDreamCpuhelimessa.WindowsPhone7oliMicrosoftinvastaus,jokajulkaistiinvasta vuonna2010.(mobileoperatingsystem2014.) Vuonna2011NokiajaMicrosoftilmoittivattekevänsäyhteistyötä,jasamallaNokian älypuhelinstrategiaksitulisiwindowsphone.tämäkäytännössätarkoittisitä,ettänokia luopuiomankäyttöjärjestelmänsäkehittämisestäjayhtiönuudetpuhelimetkäyttäisivät WindowsPhoneCkäyttöjärjestelmää.(NokiaStrategy2011.) Vuonna2010julkaistiinensimmäisettaulutietokoneet,kutenAppleniPad.TaulutietokoC neistailmestyiuseitaversiota.taulutietokoneetovathorjuttaneetperinteisentietokoc neenmarkkinoita,jamonettietokoneyrityksetovatjoutuneettekemäänradikaaleja muutoksiayhtiössään.applemyivuoden2014ensimmäiselläneljänneksellä26miljooc naaipadia.(firstquarterresults2014.) 2.3 Mobiililaitteetnykypäivänä Mobiililaitteetovathorjuttaneetjopidemmänaikaaperinteistätietokoneteollisuutta. Yhäuseampikäyttäjäostaaennemmintaulutietokoneenkuinperinteisentietokoneen. Suomessamyytiinvuonna2013lähes700000taulutietokonetta.Tämänlisäksisamana vuonnamyytiinyli1.8miljoonaakappalettaälypuhelimia.(älypuhelimiajatabletteja myytiinvuonna2013yhteensälähesmiljardillaeurolla2014.) 2.4 Mobiilipelinmääritelmä Mobiilipeliondigitaalinenpeli,jokaonerityisestisuunniteltumobiililaitteilleottaen huomioonalustanasettamatteknisetvaatimuksetjarajoitteet,kutennäytönkoon, muistinmääränjaprosessorintehon.mobiilipeleihineivätsisällykäsikonsolienkuten NintendoDS:npelit.Kuitenkinonolemassamoniapelejä,jotkaonalunperinsuunnittelC tujollekinmuullealustalle,muttajoitavoisiltipelatamobiililaitteilla.myösuudetwebc teknologiathämärtävätmuidenpelienjamobiilipelienrajaa.(mobiilipeli2013.)
2.5 Mobiilipelienhistoria 9 EnsimmäisiäjulkaistujamobiilipelejäoliSnake,jokanäkipäivänvalonvuonna1997.SnaC keonnokianjulkaisemapeli,jaseonsiitälähtienollutsaatavillaainatähänpäiväänasti erilaisinaversioina.kyseistäsnakecpeliäväitetäänmaailmanensimmäiseksimobiilipelikc si,vaikkajovuonna1994tetriscpeliolijulkaistuhagenukmtc2000claitteessa.(theevoc lutionofmobilegames2013;mobilegame2014.) Vuosituhannenvaihteessamobiilipelitalkoivatkiinnostaaisompaayleisöä,koskamatkaC puhelimiintulivärinäytöt,enemmänmuistiajanopeammatprosessorit.tämänvuoksi mobiilipeleihinalettiinsijoittamaanenemmänrahaa.mobiilipelienkehityssaavuttinoc peastipisteen,jossasuuretjulkaisijathyppäsivätmukaan.useatsenaikaisetpelijulkaisic jatjulkaisivatsuosituimmistapccpeleistäänmobiiliversiot.(theevolutionofmobilegac mes2013.) Suurinkäännekohtamobiilipelienhistoriassatapahtuivuonna2007,kunApplejulkaisi kosketusnäytölliseniphonen.vuonna2008appleavasiappstorecnimisenjakelupalvec lunlaitteillensa,jokamahdollistipelienjasovellustenhelponjakamisen.appstoren avullakehittäjätsaivatsovelluksensasuoraankäyttäjilleilmanvälikäsiä.(emt.) Vuonna2008ilmestyivätensimmäisetiPhoneCpelit.Vuonna2009suomalainenRovio julkaisimaailmallamenestyneenangrybirdscpelisarjanensimmäisenosan.pelisarjaaon ladattuylimiljardikertaa(angrybirdsreaches1billiondownloads2012). 2.6 Mobiilipelitnykypäivänä Nykypäivänälypuhelimetovatsuoritustasoltaankasvaneethuomattavastiaikaisempaan verrattuna.tämänseurauksenamobiililaitteillaalkaanäkyäentistänäyttävämpiäjalaac jempiapelejä.nopeat3gcja4gcyhteydetsekäyleistyneetlangattomatverkotovat mahdollistaneetsuurempienkinpelienjulkaisut. Mobiilipelimarkkinatovatlaajentuneetjamenestyneethyvin.ApplenAppStoressaon tällähetkelläylimiljoonaasovellustajaladattujasovelluksiaonyli60miljardia.(apple announces1millionappsintheappstore,morethan1billionsongsplayedonitunes radio2013.)
10 Mobiilipelienperinteinenansaintamallionperustunutpelinostohinnanmaksamiseen. Tämäonnykypäivänäalkanutkatoamaan,sillänykyinentrendimobiilipelienansaintaC mallinaonfreetoplay.tämätarkoittaasitä,ettäitsepelionilmainen,muttapelinedec tessäpelaamistavoihelpottaataijouduttaapeliinostettavallarahalla. 3 IOS@KÄYTTÖJÄRJESTELMÄJA@LAITTEISTOT 3.1 Mikä ios on? iosonapplenkehittämäkäyttöjärjestelmämobiililaitteistolle.iosperustuudarwinbsd Ckäyttöjärjestelmään.ApplejulkaisiensimmäisenversionkäyttöjärjestelmästäänkesäC kuussa2007.(ios2014.) Käyttöjärjestelmäonsuljettu,minkävuoksiiOSCohjelmistottäytyykirjoittaaApplenomilC latyökaluilla.jottaohjelmistojataipelejävoiluoda,tarvitseerekisteröityäapplenkehitc täjäksi.rekisteröityminenmaksaakirjoitushetkellänoin100dollariavuodessa,jokaavaa tienmobiilimaailmaan.tällärahallasaakaikkitarvittavatlisenssitjaoikeudenjulkaista ohjelmiaapplenmobiililaitteille.ohjelmiavoivirallisestijakaavainapplenomassaapp StoreCsovelluskaupassa.OhjelmoidakseeniOSClaitteillekehittäjätarvitseeApplentietoC koneen.(iosdeveloperprogram2014.) iosckäyttöjärjestelmässäeioletukeaflashctaijavactekniikoille.tämänvuoksimonet käyttäjätvalitsevatkilpailijoidentuotteita,kutengooglenandroidclaitteita. 3.2 ios@käyttöjärjestelmäversiohistoria Applejulkaisi2009ensimmäisenisonkäyttöjärjestelmäpäivityksen,jokatoimukanaan kokokäyttöjärjestelmänkattavanhaunsekätekstinleikkaamisenjaliittämisen.päivitys julkaistiinappleniphone3gs:nmukana.(iphone2014.) Seuraavasuuripäivitystulivuonna2010,kunApplejulkaisiiOS4Ckäyttöjärjestelmän. PäivitysoliApplensuurin,jasetoiyli100uuttaominaisuuttakäyttöjärjestelmään.PäiviC tyksentärkeinuusiominaisuusoliparannettumoniajo,jokamahdollistiparemmanja nopeammanmonenohjelmistonsamanaikaisenkäytön.(emt.)
11 Lokakuussa2011Applejulkaisiseuraavansuurenpäivityksensä,iOS5:n.PäivityspitisiC sällääntietoturvaanliittyviämuutoksia,jasuurimpanauutuutenatuliapplenicloudc pilvipalvelu,jokamahdollistikuvien,tiedostojenyms.pitämisenapplenpalvelimella, jolloinneolivatsaatavillajokapaikasta.(emt.) Syyskuussa2012ApplejulkaisiiOS6Ckäyttöjärjestelmän,jonkaluvattiinsisältävänyli 200parannusta.SejulkaistiinAppleiPhone5Cälypuhelimenkanssa.KäyttöjärjestelmäC päivityseituonutsuuriamuutoksiaohjelmistokehittäjille.(emt.) Vuonna2013ApplejulkaisisuurimmanpäivitykseniOSCkäyttöjärjestelmäänsä.iOS7uuC distilaitteistonulkoasuntäysinjatoilukuisiauusiaominaisuuksia.ios7sisälsiensimc mäistäkertaastandardinpeliohjaimille,jokamahdollistiuudenlaisentavansuunnitella pelejäiosclaitteille.(emt.) 3.3 YleistäiOS@laitteistoista EnsimmäineniOSClaiteeliiPhonejulkaistiinkesäkuussa2007(iPhone2014).iOSClaitteita käytetäänpääsääntöisestipelkälläkosketuksella.laitteistalöytyyyhteensäviisifyysistä näppäintä.nämäovatäänenvoimakkuudensäädin,äänenvaimennuspainike,virtapainike sekäkotipainike,jollapääseeohjelmistaulos. iosclaitteidennäyttöjenresoluutioteroavattoisistaanpaljon,kutenkuviosta1nähdään. Peligrafiikkaaluodessatäytyyottaahuomioonerilaitteidenresoluutiot,silläjospeligraC fiikkaaluodaanappleipadairillejasamaakäytetäänappleiphone4claitteelle,laitteen resurssejakäytetäänturhaan.
12 Kuvio1.iOSClaitteidenresoluutiotsuhteutettunatoisiinsa 3.4 ios-puhelimien tekniset ominaisuudet iphonecmallejaonjulkaistuyhteensäkahdeksanmaaliskuuhun2014mennessä.kaikki, paitsiensimmäinen,tukevat3gcyhteyksiä.laitteettukevatbluetoothcyhteyksiä.tauluc kossa1oneriteltyioscpuhelimienlaitetiedotjajulkaisuvuodet. Taulukko1.iPhoneCmallienvertailu(iPhone2014) iphone4 iphone4s iphone5/5c iphone5s Vuosi 2010 2011 2012/2013 2013 Resoluutio 960x640 960x640 1136x640 1136x640 Prosessori ARMCortexCA8 ARMCortexCA9 AppleA6 AppleA7 RAM 512MBLPDDR2 512MBLPDDR2 1GBLPDDR2 1GBLPDDR3 3.5 ios@taulutietokoneidenteknisetominaisuudet ipadcmallejaonjulkaistuyhteensäseitsemänmaaliskuuhun2014mennessä.taulukossa 2oneriteltyeriiOSCtaulutietokoneidenlaitetiedotjajulkaisuvuodet.Kaikistamalleista onsaatavillawificja3gcversiot.laitteettukevatbluetoothcyhteyksiäjaniissäonuseita erisensoreita,kutenkiihtyvyysc,etäisyysc,jaympäröivänvalonmittaussensoritsekä ipad2:stalähtiengyroskooppi.appleilmoittaaakkukestonolevanjopayli10tuntia. (CompareiPadModels2014.)
Taulukko2.iPadCmallienvertailu(iPad2014) 13 ipad2 ipad3 ipadmini ipad4 ipadair ipadmini Retina Vuosi 2011 2012 2012 2012 2013 2013 Reso@ 1024x768 2048x1536 1024x768 2048x1536 2048x1536 2048x1536 luutio Proses@ ARMCortexC ARMCortexC ARMCortexC AppleA6X AppleA7 AppleA7 sori A9 A9 A9 RAM 512MBDDR2 1GBLPDDR2 512MBDDR2 1GBLPDDR2 1GBLPDDR3 1GBLPDDR3 4 UNITY 4.1 Mikä Unity on? UnityonUnityTechnologiesCyhtiönluomapelimoottori.Senavullavoidaanluodasekä 2DCettä3DCpelejä.Unitytarjoaaympäristön,jossavoinopeastijahelpostiluodapelatC taviapeliprototyyppejä. Unityonkehitettyerityisestipelinkehitykseen,jasesisältäätyökalut,joidenavullavoi nopeastiluodapelattavanmaailman.unityntoimintaperiaatteetottavathuomioontärc keimmätasiatpelinkehityksessä.unitynkäyttöliittymäonhelpostilaajennettavissaitse, jasesisältäätodellalaajanvalikoimanvalmiitatyökaluja. Unitylläpystyyjulkaisemaanusealleerialustallekäyttäenlähessamaakoodia.Yleensä muutoksetovatlaitekohtaisiaoptimointejasekäominaisuuksienkäyttöönottoa.unity onniinajallisestikuinrahallisestikinhyvävalinta,koskapeliäeitarvitsetehdäerikseen jokaiselleerikohdelaitteelle.(multiplatform2014.) UnitynilmaisiinjulkaisuvaihtoehtoihinkuuluuselaimessaajettavaWebPlayer,PC,Linux, OSXsekämobiilikäyttöjärjestelmätAndroid,iOSjaWindowsPhone.MaksullisenlisensC sinvaativatlaajennettuandroid,blackberry,iosjawindowsphone8sekänintendowii, NintendoWiiU,Playstation3jaXbox360.(Emt.)
14 UnitymyöstarjoaatilausmallinUnitynmaksullisilletuotteille,jolloinmaksatjokakuuC kausipieneneränsensijaan,ettämaksaisitkokolisenssinkerralla.tämänavullaaloitusc kynnysaloittaapelientekeminenonlaskenuthuomattavastiaikaisempaanverrattuna. 4.2 Historia Unitynhistoriaalkoivuonna2005,jolloinsiitäjulkaistiinensimmäinenversioApplen pitämässäkansainvälisessäkehittäjäkonferenssissa.seolialunperinluotupelkästään MacOSXCkäyttöjärjestelmälle,jasaamansahyvänhuomionansiostasiitäalettiinluoda versioitamuillealustoille.(unity(gameengine)2014.) AjanmyötäUnityCpelimoottorionkasvattanutmainettaan,jasiitäonkintullutmaailman suosituinpelimoottoriindieckehittäjienkeskuudessa.unityolijovuonna2012käytetyin pelimoottorimobiilipelienluomisessa.(fastfacts2014.) SeuraavaanlistaanonkoottumerkittävimmätpäivityksetUnityneriversioissa.(Release Archive2014.) Versio1 C Unitynvirallisetdokumentaatiotpäivitettiin C Sisäänrakennetutshaderitlisättiin Versio2 C UusiparanneltuWebPlayer C WindowsCtuki C Maastoeditori C DirectX9Ctuki C UnitynsisäänrakennettuprofilointityökaluProfiler Versio3 C Tehokasuudistettupartikkelijärjestelmä C Sisäänrakennettureitinhaku C HDRCrenderointi C Sisäänrakennettu LevelofDetail,eliLODCtyökalu C Näytönohjaimenprofilointityökalu
Versio4 C 2DCtyökalut C DirectX11Ctuki C Mobiiliparannuksia,kutenreaaliaikaisetvarjot C LinuxCtuki 15 4.3 MiksiUnity? UnityCpelimoottorionkehitettyerityisestipelientekemiseenjasesisältääkaikkitarvittaC vattyökalut,mitäpelintekemiseentarvitaan.unitysisältäävalmiiksitoteutettujamuoc kattaviakomponentteja,valmiinfysiikkamoottorin,laajantueneri3dcmalliformaateille jamuitatavanomaisiatoiminnallisuuksia.unitykäyttääniinsanottuakomponenttimalc lia,jolloinjokainenominaisuusonomakomponenttinsa.tämänmyötäonhelppoluoda uudelleenkäytettäviäkomponentteja,jokavähentääkehityskustannuksiapidemmällä aikavälillä. UnitynylläpitämäAssetStoreCpalvelumahdollistaapelintekemisenmyösmuillekuin ohjelmoijille.assetstorenkauttalöytyypaljonvalmisratkaisuja,joidenavullavoiluoda paljonerilaisiapelejä.unitymyösitsetuottaalaadukkaitatutoriaalejapelimoottorinsa markkinoimiseen,joitahejakavatassetstorenavulla. Unitymahdollistaamyösyksinkertaisenrajapinnanuseilleerialustoillejulkaisemiseen. Vaikkapeliprototyyppiälähdettiintekemään,eihaluttuvalitateknologiaa,jollaeiole mahdollistakääntäämuillealustoillehelpolla.unityllämuillealustoillekääntäminenei vaadierikoisosaamista,eikäsuuriakoodimuutoksia. Seonsaanutlyötyäitsensäläpipelinkehitysmaailmassa,koskasetukeelaajaalaitekanC taa,onhelpostilähestyttävissä,tarjoaalaajattutoriaaliterilaistenasioidenluomiseen sekäonedullinen. 4.4 UnityEditor EditoronUnitynpäänäkymä,jossapelikoostetaankasaan.Seonsekäohjelmoijan,auC diosuunnittelijan,kenttäsuunnittelijoiden,graafikoidensekämahdollisestimyöskäsikirc
16 joittajientyökalu.editorinperusnäkymäonselkeäjasiihenpääseenopeastisisään.kuc viossa2nähdääneditorinperusnäkymä.unitynvahvuusonsiinä,ettäeditorionmoduc laarinen,jolloinsenvoimuokataomanlaisekseen.editoriavoimyöslaajentaaomilla skripteillään. Kuvio2.UnityCeditorinperusnäkymä. Editorinperusnäkymäkoostuutärkeimmistäasioista,mitätarvitseekäyttääkseenUniC tyä.perusnäkymässänäkyvätprojektintiedostot,scenessäolevatpeliobjektit,pelinäkyc mä,scenecnäkymäsekäinspectorctyökalu,jollanäkeetiedotvalituistapeliobjekteista. UnityCeditorissaonmuutamatärkeäpainike,jotkapitäätietääkäyttääkseeneditoria. Nämäpainikkeetovat: C Käsityökalu,jotakäyttämälläkäyttäjävoiliikuttaakameraasceneCnäkymässä. C Siirtotyökalu,jollavoisiirtääpeliobjektiapelimaailmassa.
C Kääntämistyökalu,jonkaavullavoikääntääpeliobjektia. C Skaalaustyökalu,jollaobjektinkokoavoiskaalata. PeliobjektejasäädetäänUnityEditorinkauttakäyttäenInspectorCtyökalua.Kuviossa3 nähdääninspectorctyökalukäytössäsekäpeliobjektinperusrakenne. 17 Kuvio3.UnitynInspectortyökalujapeliobjektinperusrakenne Editorinkauttasäädetäänmyöspelinerilaisetbuildaus asetukset,pelinerilaatutasotja fysiikoidenasetukset. BuildCasetuksissavalitaankohdealusta,mitkäscenetsisältyvätbuildiinjaasetetaanbuilC dillekehitysversiotagipäälle,jokataasmahdollistaabuildatuntuotteenprofiloimisen (ks.kuvio4).
18 Kuvio4.Unitynkääntämisasetustenvalitsemisnäkymä Kuviossa5esitelläänlaatutasonasetukset.Asetuksissavoiluodauseitaerilaatutasoja, joissasäädetäänvalojen,tekstuurien,varjojen,animoinninjaerioptimointienasetuksia. Asetuksissavoidaanmyösasettaavalmiiksijonkuntietynperustasonerialustoille.
19 Kuvio5.Unitynlaatutasojenasetukset 4.5 AssetStore Marraskuussa2010UnityavasiAssetStoreCpalvelun,jossakäyttäjätvoivatjakaatekeC miäänassettejamuillekäyttäjilleniinilmaiseksikuinmaksuavastaan.unityottaa30 prosenttiamyyntituloistaitselleen.kaupassaonnykypäivänäsuurimääräassetc paketteja,kutentekstuureja,materiaaleja,valmiitaratkaisujapelilogiikkaavartenja3dc malleja.lisäksikaupassajaetaanaloittelijoillesuunnattujapaketteja,kutentutoriaaleja jaesimerkkiprojekteja.kuviossa6näkyyassetstorenaloitusnäkymä.(sellassets2014.)
20 Kuvio6.UnityAssetStorenaloitusnäkymä AssetStoressaonkirjoitushetkelläsaatavillayhteensäyli10000erilaistaassetCpakettia. SuosituimpiapakettejaovatNGUIjaPlayMaker.AssetStorenhinnatovatyleisestiottaen matalat,jokamahdollistaapienillekkinstudioilleparemmatmahdollisuudet,koskavoivat halutessaankäyttäähiemanrahaavalmisiiinratkaisuihin,eikäkaikkeatarvitsetehdä itse. 4.6 Profiler UnitynsisäänonrakennettuvalmisprofilointityökaluProfiler.Profilerraportoikuinka paljonsuorituskykyämikäkinosacaluevie.profilerinavullasaatarkkaatietoauloscpu:n käytöstä,gpu:nkäytöstä,renderöinnistä,fysiikoista,muisteistajaäänistä.profilerpiirc tääreaaliaikaisestikäyräteriosacalueille,joidenavullanäkee,missätapahtuusuoritusc
kykyongelmia.profilerinavullasaainformaatiotaframeckohtaisesti.kuviossa7nähdään ProfilerCtyökalunperusnäkymä,jossaonvalittunaprofiloitavaksiprosessorinkäyttö. 21 Kuvio7.UnitynsisäänrakennetunProfilerCtyökalunyleisnäkymä CPUCosionallanäkeetarkattiedotkauankorenderointi,komentosarjojenläpikäynti, roskienkeruujafysiikatvievätaikaa.deepprofilecasetuksenaktivoimisellanäkeeentistä tarkempaainformaatiota,kuinkakauaneriskriptiensuorittamiseenmeneeaikaajamisc säpullonkaulatovat. GPUCnäkymässätarkattiedotnäkyväterilaistenmateriaalienrenderoinninkestoistaja määristäsekämuutatärkeäätietoanäytönohjaimentoiminnasta.gpucnäkymänavulla saadaantietoa,jaksaakonäytönohjainpyörittääerilaisiashadercratkaisujavaipitääkö shadereitayksinkertaistaa.
Muissaosissanäkeepiirrettävienpolygonien,verteksienjadrawcallsienmääränsekä muistinkulutuksen,äänienmääränjaperusinformaatiotafysiikkamoottorilta. 22 4.7 Unityn toimintaperiaate 4.7.1 Ideologia Unitypohjautuukomponenttipohjaiseenratkaisuun.Tämäkäytännössätarkoittaasitä, ettäunityllätehdytpelitrakennetaansceneistäjotkakoostuvatpeliobjekteista. 4.7.2 GameObject UnityCpelimoottorikäyttääGameObjectejaelipeliobjekteja.PelitrakennetaanpeliobjekC teista,jotkakaikkivoidaanmääritelläerilaisiksi.peliobjektiitsessääneipidämitään muutasisälläänkuinpaikanmaailmassa,muttaniihinvoidaanliittääkomponentteja, jotenniitävoidaankutsuaeräänlaisiksikomponenttisäiliöiksi. Peliobjektiinlisätäänerilaisetkomponentit,kutenskriptit,valolähteettaicolliderit.PeC liobjekteihinasetetutkomponentitvoivatkeskustellakeskenään.peliobjekteillevoidaan asettaaomatagi,tasojanimisekäniistävoidaanluodavalmisolioeliprefab. 4.7.3 Prefab PrefabelivalmisolioonuudelleenkäytettäväassettijaseluodaanhalutustapeliobjektisC ta.prefabialuodessasekopioikaikkiominaisuudet,komponentitjaarvotpeliobjektista. Peliobjekteistaluodaanprefabeja,koskahalutaansaadauudelleenkäytettäviäkomC ponenttejasekäprefabejavoidaanluodamyöspelinaikana.prefabitovathyödyllisiä esimerkiksikerättävienesineiden,vihollisten,ammusten,rakennelmientaimuidenusein toistuvienasioidenluonnissa. Sensijaan,ettäskriptissäluotaisiinuusipeliobjekti,johonlisätäänkomponenttejaja määritelläänkaikkitietokoodissa,luodaankinvainkopioprefabista.prefabienavulla artistitvoivatmuokataprefabiasuoraaneditorinäkymässäeikäheidäntarvitsepyytää ohjelmoijaamuuttamaanesimerkiksivihollisenkokoataiväriä.(instantiatingprefabs 2014.)
Kaikkiprefabbeihintehdytmuutoksettapahtuvatmyössenkopioissa,vaikkajokainen kopioonkinitsenäinenpeliobjektipelimaailmassa.(prefab2014.) 23 4.7.4 Tag Tagitovatlistatunnistimia,jossaonUnitynomiasekäkäyttäjänitsensämäärittelemiä nimiä.peliobjektiterotellaantoisistaantageilla.tagienavullavoidaanmyösverrata,onc koesimerkiksiammusosunuttietyntyyppiseenkohteeseenkutenpelaajaan. 4.7.5 Layer LayeritelitasotovatUnityntoinentapaerotellaasioitatoisistaan.Unityssäonsenomia tasojasekäniitävoidaanluodaitse.tasojenavullavoidaaneritelläerilaisetasiattoisisc taan,esimerkiksistaattisetmaailmassaolevatobjektit,kutenkivet,jadynaamisetobjekc tit,kutenliikkuvathahmot.tästäonsuurestihyötyäfyysikoidenkanssa,joshalutaan, ettätietyttasoteivätosutoisiinsa.kuviossa8näkyyfysiikoidentörmäysmatriisi,jonka avullamääritelläänmitkätasotosuvattoisiinsajamitkäeivät. Kuvio8.Törmäysmatriisi
24 4.7.6 Scene Scenetelipelimaailmatkoostuvatpeliobjekteista.Scenetsisältävättiedonsiitä,mitä halutaantapahtuvanjanäkyvänpelissä.scenetyleensäsisältävätpelimaailmangeometc rian,kamerat,valot,hahmotjakäyttöliittymän,muttavoidaanmyösluodascenejä,joisc saonvainkäyttöliittymätaiesimerkiksilisäägeometriaamaailmaan. Scenejämuokataaneditorinäkymässä.Scenensisältämiäpeliobjektejavoidaanpoistaa tailisätäsekäpeliobjektienkomponenttienarvojavoidaanmuuttaa.normaalistikaikki peliobjektittuhoutuvatscenenvaihdonyhteydessä,muttaobjektejavoidaanasettaa skripteissäolemaantuhoutumattakäytämällädontdestroyonloadcmetodia. 4.8 Ulkoisettyökalut Unitynmukanatuleevainohjelmistokehitysympäristö,muttaUnityynvoidaanintegroida lukuisiamuitaohjelmia,kutenmicrosoftcyhtiönvalmistamavisualstudio kehitysympäristösekäerikuvankäsittelyohjelmia.unitytukeemyösulkoistaversionhalc lintaa. UnitynmukanatulevaohjelmistokehitysympäristöMonoDeveloponhiemanmuokattu versiooikeastamonodevelopista,silläsenavullavoiitsetestataunityssätehtyäpeliä. MonoDevelopmahdollistaaohjelmoimisenjaohjelmakoodindebuggauksen. 4.9 Ohjelmointi Unitytukeekolmeaeriohjelmointikieltä.KäytetyinkielionC#,jokaonalkuaanMicC rosoft yhtiönkehittämäkieli.unitync#tuleehiemanjäljessäverrattunamicrosoftin omaan,muttakaikkitärkeimmätominaisuudetlöytyvät.toiseksikäytetyinkielionunic tyscript,jokaonjohdannainenjavascriptckielestä,javiimeisenälöytyyboockieli,joka muistuttaavahvastipythoncohjelmointikieltä.(unity(gameengine)2014.) UnitylläohjelmoidessaeiainavoikäyttääkaikkiaperinteisiäolioCohjelmoinnintapoja. Unityssäonpoikkeuksellinentapa,etteimuodostimia(Constructoreita)voiluodasilloin, kunluokkaperiiunitynmonobehaviourcluokan.jokainenluokka,jokaonperinytmonoc BehaviourCluokan,sisältääUnitynperusominaisuudetjamahdollistaavalmiidenkompoC
25 nenttienkäytön.monobehaviourinperineetskriptitvoivattoteuttaamontaerirajapinc taa.monobehaviourinperineenskriptinvoiyhdistääpeliobjektiineditorinäkymässätai ohjelmakoodissa.yhdellepeliobjektillepystyylisäämäänmoniaskriptejä.skriptiinvoic daanmyöskirjoittaa,ettäsevaatiijonkunmuunkomponentin. UnityCskriptaustapahtuukirjoittamallaohjelmointikooditMonoBehaviourinperivään luokkaan.monobehaviourinperineetluokatvoivattoteuttaavalmiitametodeja,joita UnityCpelimoottorikutsuuautomaattisesti.Taulukossa3esitellääntärkeimmätMonoC BehaviourCmetoditsekäniidenkäyttötarkoitus.Näistämetodeistatärkeimmätovat Awake,Start,Update,FixedUpdatejaLateUpdate.(MonoBehaviour2014.) Taulukko3.MonoBehaviourtyyppistenmetodienkäyttötarkoituksetavattu Metodi Awake Start Update FixedUpdate LateUpdate OnDestroy OnDisable OnEnable OnCollisionEnter/ Käyttötarkoitus AwakeCmetodikutsutaan,kunskriptininstanssionluotu.AwakeC metodiavoiajatellaeräänlaisenamuodostimena,jossaskriptialusc taaitsensä. KutsutaanvainkerranjuuriennenensimmäistäUpdateCkutsua.StartC metodissahaetaanviittauksetmuihinpeliobjekteihinjakomponentc teihin,koskasilloinollaanvarma,ettäneovatalustaneetitsensä. Kutsutaanjokaframekerran. Kutsutaanfysiikoidentahdissa,elieioleriippuvainenruudunpäiviC tysnopeudesta.käyttökohteenaesimerkiksipelaajanpäivittäminen. KutsutaanjokaframeUpdateCmetodienjälkeen.KäytännöllinenesiC merkiksikameraasiirtäessä. Kutsutaan,josskriptituhotaan. Kutsutaan,josskriptidisabloidaan. Kutsutaan,josskriptiaktivoituu. Kutsutaan,kunpeliobjektiinkiinnitettyrigidbody/colliderosuutoiC
OnTriggerEnter seenrigidbodyyn/collideriin. 26 OnCollisionStay/ OnTriggerStay OnCollisionExit/ OnTriggerExit OnApplicationQuit OnApplicationFocus Kutsutaanjokafysiikoidenpäivitykselläkunpeliobjektiinkiinnitetty rigidbody/collideronkosketuksissarigidbodyyn/collideriin. Kutsutaan,kunpeliobjektiinkiinnitettyrigidbody/colliderlopettaa kosketuksentoiseenrigidbodyyn/collideriin. Kutsutaanjokaisessaskriptissäennenkuinpelisammuttaaitsensä. Kutsutaan,jospelaajanfokuskatoaataituleetakaisinpeliin. MonoBehaviourkoodinajaminensuoritetaanseuraavassajärjestyksessä: KaikkiAwakeCkutsut KaikkiStartCkutsut Fysiikoidenpäivitysaina,kunlähestytäänasetettuafysiikoidenpäivitysaikaa o KaikkiFixedUpdateCkutsut o Fysiikoidenpäivitys o LaukaisuCeventit o TörmäysCeventit Rigidbodienpaikanjarotaationpäivitys Syötetapahtumienrekisteröiminen KaikkiUpdateCmetodit Animaatioidenpäivitys KaikkiLateUpdateCmetodit Renderointi SkriptienmuuttujieninitialisointipitäätehdäAwakeCmetodinsisässä,silläsekutsutaan ainaennenstartcmetodeja.mahdollisetviittauksetmuihinkomponentteihintehdään tämänvuoksistartcmetodissa,jolloinjokainenskriptioninitialisoinutitsensävalmiiksi.
Update metodikutsutaankerranjokaisenframeaikana,jonkavuoksisielläpyöriisuurin osapelinkäyttäytymiseenliittyvästälogiikasta,kutenpelihahmonliikuttaminen.seuraac vassaonesimerkki,kuinkaguitextkomponenttiinpäivitetäänkulunutaikapelinalusta kerranframessa. publicclasspaivitakelloa:monobehaviour{ publicguitextkellonaikapelinalusta; voidupdate(){ KellonAikaPelinAlusta.text=Time.realtimeSinceStartup.ToString(); } } FixedUpdateCmetodiaUnityyrittääkutsuakiinteänaikavälinmukaan.Fysiikkamoottorin suorittamatpäivityksetjalaskutoimituksettapahtuvathetifixedupdatensuorittamisen jälkeen.onsuositeltavaatehdäkaikkifysiikoihinliittyväohjelmointitämänmetodinsic sällä.seuraavassaesimerkissänähdäänkuinkarigidbodykomponenttiinlisätääneteenc päinkohdistuvaavoimaa: publicclassliikutarigidbodya:monobehaviour{ voidfixedupdate() { rigidbody.addforce(vector3.forward); } } LateUpdate metodikutsutaanmyöskerranframenaikana,muttavastakunkaikkiupdac tecmetoditonsuoritettu.lateupdateonhyvämetodisellaisellelogiikalle,jokaonriipc puvainenmuistakomponenteista,joidentiedotsaattavatmuuttuaupdatecmetodinaic kana.tämäsenvuoksi,koskatietovoiollavanhentunutframenaikana,silläsuoritettac vienskriptiensuorittamisjärjestystäeioleennaltamääritelty.seuraavassaesimerkissä komponenttiseuraakohdetta,minkävuoksitoiminnonpitäätapahtualateupdatemec todissa,koskapelaajanpaikkasaattaamuuttuaupdatemetodinaikana. publicclassseuraapelaajaa:monobehaviour{ publictransformkohde; voidlateupdate(){ transform.position=kohde.position; } } Unitynskriptittoimivatpeliobjektienkomponentteina,jonkavuoksinevoivatmyöskesC kustellakeskenäänjaunityonluonutmoniatapojatoteuttaasen.voitetsiäeripeliobc jektejatainiidenkomponenttejatyypin,nimen,taginjatasonmukaan. 27
Skriptissävoiollasuoraviittausjohonkintoiseenkomponenttiin,jokavoidaanasettaa editorinavullavetämälläsepublicctyyppiseenmuuttujaan,taisevoidaanetsiäeritavoilc la. Seuraavassaonesiteltyeritapojakäsitellämuitakomponentteja,kutenkomponenttien hakupeliobjektistatainiidenlisääminensiihen: publicclassesimerkkikomponenttihausta:monobehaviour{ publickomponentti1komponentti1; publickomponentti2[]komponentti2; publiccamerapaakamera; privaterigidbodyrigidbody; privatetransformlapsitransform; voidstart(){ //HaetaanensimmäinenlöydettyKomponentti1komponentti komponentti1=getcomponent<komponentti1>(); //HaetaankaikkiKomponentti2tyyppisetkomponentit komponentti2=getcomponents<komponentti2>(); //EtsitäänGameObject,jonkatagiksionasetettuPaakamera //jahaetaansiitäcamera_komponentti paakamera= GameObject.FindWithTag(Paakamera).GetComponent<Camera>(); //LisätäänGameObjectiinuusiRigidbody Rigidbody=gameObject.AddComponent<Rigidbody>(); //EtsitäänitsestämmeobjektianimeltäänLapsiTransform LapsiTransform=transform.Find(LapsiTransform); } } YleinentapatehdäajastettujaasioitaUnityssäonCoroutinet.NiidenavullavoidaanajasC taaasioitatapahtumaantietynajanpäästä,framenlopussaennenpiirtämistäsekäniillä voidaanvaihtoehtoisestijopakorvataupdatemetodintoiminta.coroutinetluodaan samallatavallakuinnormaalitmetodit,muttaniidentyypiksiasetetaanienumerator. Seuraavassaesimerkkicoroutinesta,jokamuuttaamateriaalinalphaarvoaC0.1kerran framessa: IEnumeratorFade(){ for(floatf=1f;f>=0;f_=0.1f){ Colorcolor=renderer.material.color; color.a=f; renderer.material.color=color; yieldreturn; } } 28
5 TANK HOGS -PROTOTYYPIN TOTEUTUS 29 5.1 Mikä Tank Hogs on? TankHogsonmobiilipeliprototyyppi,jokaonerityisestisuunniteltuAppleiPad4jasitä uudemmilleapplenmobiililaitteille.pelionreaaliaikainenverkkopeli,jossakaksipelaac jaataisteleetoisiaanvastaan.peliontoteutettutäysin3dctekniikalla.pelaajantehtävänä onohjataomaapäätankkiastrategisiinpaikkoihinyrittäentuhotavastapelaajantankit sekätämäntukikohdan.senlisäksipelaajallaonmuutamaheikompitekoälynohjaama tankki,jotkaautomaattisestiajavatkohtivastustajantukikohtaa.taistelutovatnopeita kahdenminuutintiiviitätaisteluita. Pelingraafisessaulkoasussaontavoiteltupiirrosmaisuuttasekäpelinteemassaonvahva humoristinensävy.kuviossa9ontankhogscpelinlatausruutu,jostaselkeneepelissä käytettygraafinensuuntaus. Kuvio9.TankHogsCpelinlatausruutu
30 Taistelukenttäkoostuukahdenpelaajantukikohdista,elifarmeista.Näidenvälistälöytyy taistelualue,jossaonerilaisiaesteitäjakerättäviäesineitä.tavoitteenaontuhotavasc tapelaajantankit,tukikohtasekäkerätämahdollisimmanpaljonkolikoitataistelukentälc tä.taistelunvoittajaonvihollisensatuhonnuttaiajanloppuessaenemmänpisteitäkec rännytpelaaja. Ennentaistelunalkuaesitellääntaistelunosapuolet(ks.kuvio10).Alunesittelynjälkeen alkaaitsepeli,jolloinpienemmätjoukotlähtevätautomaattisestihyökkäämäänvastusc tajanfarmiakohti.ensikosketusviholliseentapahtuutaistelualueellajaviimeinentaistec lukäydäänjommankummanpelaajantukikohdassa. Kuvio10.TankHogsCpelinjoukkojenesittelyintro
5.2 Työskentelymenetelmät 31 5.2.1 Suunnittelu Peliäsuunniteltaessatäytyisaadaselville,kuinkahyvinUnitysoveltuupelientekemiC seen,kuinkapelitpitääsuunnitellamobiiliympäristöön,sekämitärajoitteitanykypäivän mobiililaitteetasettavat. Pelinideaakehitettäessätutkittiinuseitasuosittujapelejä,kuinkanetoimivatjamiksine ovatsuosittujasekäkuinkaneovatteknisestitoteutettu,kutenclashofclans,hillclimb Racing,DeadTriggerjaMinigore.Pelejätutkiessahuomaavälittömästimobiililaitteiden asettamatrajoitteet,silläpelitovatgraafisestihuomattavanhuononnäköisiäverrattuna nykypäiväntietokonectaikonsolipeleihin.peleissäolirajoitetturuudullanäkyväntavac ranmäärääheikoimmillalaitteilla. PrototyyppiätehdessäkäytettiinmahdollisimmanpaljonUnityAssetStorestalöytyviä ratkaisuja.assetstorestalöytyyvaltavamäärä3dcmalleja,ääniäsekätekstuureja,joita hyödynnettiinpeliätehdessä.lopulliseentuotteeseenassetstorestalöytyneetassetit korvattiinomilla. 5.2.2 Työlaitteistot ja -välineet Pelinkehitystapahtuipääsääntöisestietätyöskentelynä.Projektinalustaastipidettiin muutamankerranviikossayhteyttäskypecohjelmanavullasekäprojektintiedostotpic dettiinbitbucketcpalveluntarjoamassamercurialcpohjaisessaversionhallintajärjestelc mässä. KehityksenaikanapäätyökaluinatoimiApplenMacbookProCkannettavatietokone,SubC limetextctekstieditorisekäunityprocversio4.3.ohjelmointikielenäkäytettiinc#,koska setarjosiparemmantuenoliocohjelmointiinsekäseolientuudestaantuttu.testilaitteec nakäytettiinipad4sekäiphone4s,joidenkäyttöjärjestelmänäoliios7.0.graafikon työkaluinatoimivatadobephotoshopcs5sekäautodesk3dsmax2011.
32 KoskaUnitytarjoaailmaiseksiWebPlayerCkäännöstentekemisen,niitäkäytettiinhyöC dyksipelinkehityksessä.näidenavullasaatiinhelpostiuusinversiotestattavaksiilman, ettätäytyierikseentehdäkäännöstämobiililaitteille. 5.2.3 Roolit pelin teossa Pelienluominenonmuuttunutalkuaikojenyhdenhengenprojekteistaerilaisiksijaniihin liittyynykypäivänätodellapaljonerilaisiarooleja.pelintekeminenvaatiiohjelmoijia,3dc mallintajia,graafikoita,kenttäsuunnittelijoita,markkinoijia,tuottajia,audiosuunnittelic joitasekälukuisiamuitatahoja. Ohjelmoijientehtävänäonohjelmoidapelinlogiikka,luodaefektit,säätääpelinfysiikat halutunlaisiksisekäottaakäyttööngraafikoidenjaaudiosuunnittelijoidenluomatassetit. SuuremmissaprojekteissaonomatohjelmoijateriosaCalueilla. Graafikotsekä3DCmallintajatluovatpelinulkoasunjavaikuttavatvahvastipelintunnelC maan.heluovatkäyttöliittymät,3dcmallit,tekstuuritjamateriaaliteriobjekteille. Yleensä3DCmallinjasentekstuuritmallilletekeesamahenkilö.Graafikoidenja3DC mallintajienlisäksisuuremmissaprojekteissaonerillisettasosuunnittelijat,jotkasuunc nittelevatjatoteuttavatpelinerikenttiä.helisäävät3dcmallintajientekemiäesineitäja hahmojakenttiin. Peliprojektiintarvitseemyösmuitaosaajia,kutentuottajan,jokahallitseeprojektinkuC lun,hoitaaajanhallinnan,pitääbudjetistakiinnijapitääns. narutkäsissään.tämän lisäksimyösmarkkinointiintarvitaantyövoimaa,silläseontodellatärkeääpelialallavalc tavanpelitarjonnanvuoksi.huonomarkkinointiyleensäjohtaahuonoihinmyyntilukuihin japelieimenestyodotetullatavalla,jonkavuoksiyrityssaattaajoutualopettamaantoic mintansa. Laaduntestauksellapyritäänsiihen,ettäpelitoimiimoitteettomasti.Pelinkaatumisetja ohjelmavirheetpyritäänhavaitsemaanjakorjaamaan.pienemmissäprojekteissaohjelc moijattekevätohjelmakoodilleentestititse,muttasuuremmissaprojekteissaontesc taustyökalujenkehittäjiä,joidenvastuullaonluodakunnontestausvälineetpeliävarten.
33 KoskaTuotantoyhtiöTasoOyonuusidigitaalipelejäluovayritys,sensisäisetroolijaot ovathäilyviä.koskayritysolipienijatyömääränollessasuuri,jokainenjoutuitekemään asioitaomanosaamisalueenulkopuolelta,elijokainenhenkilöosallistuipelicideankehitc tämiseenjasuunnitteluun,markkinoinninsuunnitteluun,pelintestaamiseenjaprojektin hallinnointiin. 5.3 Pelin rakenne 5.3.1 Kansiorakenne NiinUnityCprojektinkuinminkätahansapeliprojektinkansiorakennettakannattaasuunC nitellahyvissäajoinennentoteutuksenaloittamista,silläilmansuunnitteluaprojektirac kenteestatuleehelpostiyksisuurisekamelska. TankHogsinkansiorakennesuunniteltiinolemaanmahdollisimmanselkeämyössellaisilC le,jotkaeivätoleolleetaikaisemminmukanapeliprojekteissa.tämänvuoksiprojektissa onjaettukaikki3dcmallit,tekstuurit,materiaalit,skriptitjaäänettarkastinimettyihin kansioihin.tämämahdollistaahelponjavaivattomantyöskentelyneriosapuolienvälillä, muttavaikeuttaaasioidenluontiadynaamisesti,koskaassetinnimensijaantarvitaankin pitkätiedostopolku.kuviossa11ontankhogscprojektinkansiorakenteenjuuritaso. Kuvio11.TankHogsCprojektinkansiorakenne
34 Unityssäonmuutamakansionimikevarattuerikoistehtäviävarten.Nämänimikkeetovat Editor,Plugins,Resources,Gizmos,WebPlayerTemplates,StreamingAssets,Standard AssetsjaProStandardAssets.Taulukossa4onavattujokaisenerikoiskansionperusidea. Taulukko4.Erikoiskansioidenselitys(SpecialFolderNamesinyourAssetsFolder2014I.) Kansionimike Editor Plugins Resources Gizmos WebPlayerTemplates StreamingAssets StandardAssets Tarkoitus EditorCkansiomahdollistaaskripteissäpääsynUnityEditorAPI:in. JosskriptikäyttääjotainluokkaataitoiminnallisuuttaUnityEditor luokasta,skriptintäytyyollaeditorckansiossa. Plugins-kansioonpitäälaittaakaikkinatiivilisäosat,joihinhalutaan päästäkäsiksiskripteistä.pluginsckansioeimyöskäänvoiollaminc käänkansionalakansio,vaansepitääsijoittaaprojektinjuureeneli AssetsCkansioon. Resources-kansioonsijoitetaankaikkiassetit,johonhalutaanpäästä käsiksinimentaipolunmukaanskripteistä.resourcesckansion kanssapitääollatarkka,silläunitysisällyttääkaikkiassetitresources-kansiosta,vaikkaniitäeikäytettäisiollenkaan. GizmosCkansioonsijoitetaankaikkitekstuuriCjaikoniassetit,joita halutaankäyttäägizmos.drawicon()toiminnonavulla.assetteja voidaankutsuanimenmukaankansiosta. WebPlayerTemplatesCkansioonsijoitetaanuudetsivupohjatselainC versiotavarten. StreamingAssets-kansioonsijoitetuttiedostotkopioidaankäännökC senyhteydessäsellaisenaanpelinjuureen.polkukansioonvaihtelee erikäännöksissä,muttapolkuonsaatavillaapplicatic on.streamingassetspathmuuttujankautta. Standard<Assets<-kansioonsijoitetutskriptitkäännetäänainaenC simmäisenä.tämäonhyödyllinenominaisuus,koskaesimerkiksise
onyksitapaavatapääsyc#cskripteistätoisenkielenskripteihin. 35 ProStandardAssets ProStandardAssetsCkansiotoimiisamallaperiaatteellakuinStandard<Assets<-kansio,muttasinnetulisisijoittaaskriptit,jotkakäyttäC vätmaksullisenversionominaisuuksia. 5.3.2 Scenejen rakenne TankHogsCpelijaettiinyhteensäkolmeensceneen.PelialkaaInitSceneCscenestä,joka hoitaapelinyhdistämisenverkkopalvelimeen,initialisoipelinäänet,valaistuksenjaasec tukset.kunpelionsaanutinitialisoituaitsensäjayhdistänytpalvelimelle,pelivaihtaa itsensäautomaattisestimenucsceneen. Menu-sceneonTankHogsissayksinkertainen.TaustallanäkyytaistelualuejayksinkerC tainenanimaatiopyörittääkameraakentänympärillä.tämänlisäksiruudussaonvain kaksinäppäintä,joistatoisellayhdistetäänpeliinjatoisestapäästäänasetuksiin.menusc sanäkyymyösyrityksenlogosekäyksipelinhahmoista. ToisenpelaajanlöytämisenjälkeenpelilataaautomaattisestiGameCscenen,jossataC pahtuuhuomattavastienemmänkuinmuissasceneissä.gamecscenetoimiipelintaistec lualustana.scenenlatauksenaikanapelikentänkeskialueluodaansatunnaisestimuutac mastavalmiiksirakennetustamallista,minkäavullasaadaanhiemanvaihtelua.kunmoc lempienpelaajienjoukotonluotu,alkaaesittelyanimaatio,jossakäydäänläpisekäomat ettävastustajanjoukot.tämänjälkeentaistelualkaa.josjommankummanpelaajan yhteyspalvelimeenkatkeaa,pelipalaaautomaattisestimenu-sceneen. 5.4 Audiovisuaalinen toteutus 5.4.13D-mallit TankHogsCpelinkaikki3DCmallitloiyrityksengraafikkoAutodeskin3DSMax2011C ohjelmalla.sallitutkokonaisverteksimäärätiosclaiteillaovathyvinmatalat,minkävuoksi 3DCmallitsuunniteltiinalustaalkaensisältämäänmahdollisimmanvähänverteksejä. Pitääkinmuistaa,ettämallinnusohjelmistojennäyttämätverteksimääräteivätvastaa
36 Unityynvietyjenmallienverteksimäärää,koskaverteksitsisältävätmyösmuutainforC maatiotakuinomansijaintinsa,kutenuvkoordinaatit,normaalit,tangetitjamateriaalic enid:n.kuviossa12nähdään,kuinkatankhogsissakäytettyjen3dcmallienverteksimääc riäsaatiinvähennettyäpoistamallaturhaageometriaa. Kuvio12.Esimerkkioptimoiduista3DCmalleista,joistaonpoistettuturhageometria 5.4.2 Tekstuurit ja materiaalit Tekstuuritjamateriaalitmäärittävätmillaiselta3DCmallitnäyttävät.TekstuuritovatkäyC tännössäkuvia,joita3dcmallienpäälleikäänkuinpingotetaan.materiaalitmäärittelevät näyttääkötekstuuriesimerkiksikiiltävältävaimattapintaiseltasekäkäytetäänkötekstuuc rinläpinäkyvyyttä. Jokainenmateriaaliluoyhdendrawcallsinelipiirtokomennon,jonkavuoksiTankHogsin tekstuuritkoostettiinmuutamaantekstuuriatlakseen,jokamahdollistivainmuutaman erimateriaalinkäytön.3dcmalleillepitääluodaerikseenuvckartoitus,ettänelöytävät
37 oikeantekstuurinatlaksesta.tekstuurejavartenkoostettiinkolmeeriatlasta,joistaluoc tiinkolmeerimateriaalia.materiaaleillaolikolmepääkohdetta,joistaensimmäinenoli läpinäkyvyyttäsisältäville,toinenolins.cutoutcmateriaali,jakolmasolinormaaleille tekstuureille.kuviossa13nähdäänläpinäkyvyyttäsisältävätekstuuriatlas. Kuvio13.Läpinäkyvyyttäsisältävätekstuuriatlas 5.4.3 Käyttöliittymän suunnittelu Pelinkäyttöliittymäonsuunniteltutoimimaanerityisestitaulutietokoneilla.Päävalikon käyttöliittymäpidettiinyksinkertaisena,eikäsensuunnitteluunjatoteutukseenkäytetty paljoaresursseja.battlescenenkäyttöliittymäänsensijaankäytettiinhuomattavamäärä resurssejaniinsuunniteluunkuintoteuttamiseen.sesisältääkaikentarvittavantiedon mitäpelaajatarvitseepelatessaan,kutentaistelunjäljelläolevanajan,elämät,painikc keeteritoimintojenpäällekytkemistävartensekäkosmeettisiaasioita.
38 Taistelunkäyttöliittymäkoostuuneljästäosiosta,jotkaovatIntroC,BattleC,ScoreCjaSettingsGUI.Näistäosioistavainyksikerrallaanonkäytössä.Taisteluunsiirtyessäpelialkaa introsta,jolloinintroguionkäytössä,jokaonyksinkertainen,silläsiinäonvainmuutama komponentti.introgui<näyttääpelinalussaajastimenennenkuintaistelualkaa.ajastic menjälkeentaistelualkaajabattleguiaktivoidaan. BattleGUIssa<näkyykaikkiolennainentieto.Kuviossa14näkyyBattleGUIn<käyttöliittymä, jokaontoteutettuyrityksensaatujenassettienjasuunnitelmienmukaan. Kuvio14.TankHogsCpelintaistelukäyttöliittymä BattleGUIn<yläpalkissanäkyytiedot,kuinkamontatankkiavastustajallaonjäljelläja montakoelämäähänenpäähahmollaanon.yläpalkissaonmyösajastin,jossanäkyypalc jonaikaaonkulunutjapaljonsitäonjäljelläsekämittari,jossanäkyyansaittujentähtien määrä. BattleGUInoikeassaalareunassaontaistelussakäytettävätnapit.Nappejaonkolme, joistayksiaktivoipäähahmonerikoisliikkeen,yksikäskeepienempienjoukkojenseurata pelaajaajaviimeinennäppäinaktivoipelaajanpäähahmollenopeammanliikkumisenja
39 ampumisenlyhyeksiajaksi.erikoisliikepainikejatehonparannuspainikeovatdeaktivoic tuina,josneeivätolekäytettävissä. BattleGUIn<vasemmassaalareunassasijaitseekaksipainiketta,joistatoisellavoidaan fokusoidakameratakaisinohjattavaanpäähahmoonjatoisellavoidaankysyävastapec laajalta,haluaisikotämäaloittaapelinalusta. 5.4.4 Käyttöliittymän toteutus KäyttöliittymätoteutettiinmaksullisellaNGUIClisäosalla,koskaUnityeitarjonnutratkaiC suakunnonkäyttöliittymientekemiseensentekohetkellä.nguisisältäähuomattavan määräntoimintojakäyttöliittymientekoon.nguionnopeajakuluttaavähänlaitteen resursseja.senavullaonhelppoluodaresponsiivisiakäyttöliittymiä,jotkatoimivatkaic kenkokoisillaresoluutioilla. NGUInkäyttöönottotapahtuupurkamallaostettuNGUICpakettiUnityCprojektissa.PurC kamisenjälkeenunitynylävalikkoonilmestyyngui,jostalöytyykaikkinguintyökalut. ValikostalöytyyCreate2DUICpainike,jokaluoscenenhierarkiaanUIRootCnimisenpeC liobjektin.tämäpeliobjektisisältäänguintarvitsematkomponentiteliuirootcjauicac merackomponentit.uirootckomponentinavullamääritellään,minkäkokoiselleresoluuc tiollekäyttöliittymäälähdetääntekemään,jauicamerackomponenttihoitaasyötteiden käsittelyn. NGUIkäyttääniinsanottuatekstuuriatlastatoimiakseennopeammin.Tämätarkoittaa sitä,ettäkaikkikäyttöliittymäänluoduttekstuurityhdistetäänyhdeksiisoksitekstuuriksi NGUIntarjoamallatyökalulla.Työkaluluotekstuurinvalmiiksijalaskeeautomaattisesti tiukimmanmahdollisentuloksen,ettäsaatuatlasolisimahdollisimmanpieni.atlakseen voidaanlisätämyösfontteja(ks.kuvio15),jolloinpeliinvoidaankirjoittaatekstiähyvin kevyesti.
40 Kuvio15.NGUInmukanatulevaesimerkkiatlas 5.4.5 Efektit Pelissäkäytettiinefektejäpääasiassaräjähdyksiävarten.Pelinefektitluotiintäysin 2D:nä,jotkaaseteltiinsamaankulmaankuinkamera.2DCefektitluotiinkäymälläeräänC laisentekstuuriatlaksen,elitässätapauksessaspritesheetin,kohtialäpihalutullanopeuc della.tämätekniikkamahdollistiuseammanefektinnäyttämisenyhtäaikaisestiilman, ettäpelinsuorityskykykärsii. Seuraavassaesimerkissäasetellaanobjektikatsomaankohtikameraa: Vector3kohdeVektori=paaKamera.transform.position_transform.position; transform.lookat(kohdevektori); 5.4.6 Äänet PelinäänimaailmaluotiinyrityksenomienassettienavullakäyttäenMasterAudioC lisäosaa.masteraudioonvalmisratkaisu,jokatarjoaakevyenratkaisununohtamatta erikoisempiakaantoimintoja.masteraudiollavoidaanluodauseitasoittolistoja,jotka
voivatsisältääuseitaerikappaleita.soittolistatsisältävätvalmiittoiminnotkappaleiden sekoittamiseenjavaihtamiseen,sävelkorkeudenmuokkaamiseensekäuseitamuita ominaisuuksia. MasterAudiossaääniefektittoimivatääniefektiryhmänä,jotkaluodaantietyllänimelläja nevoidaanlisätäjohonkinhaluttuunkokoelmaan.erikokoelmiavoidaanhiljentäätai vahvistaakokoelmannimenmukaan.ääniefekteilleluotunimimahdollistaasen,että yhdenääniefektinallevoidaanasettaauseitaeriversioita,joitavoidaanpainottaahac luamansamukaan.painottaminentarkoittaasitä,ettäeriääniefekteillevoidaanasettaa erimääräinstansseja,joistasittensatunnaisestihaetaanyksi.esimerkiksitankhogsin räjähdysefektilleonolemassakolmeääniefektiä,joistakahdestaonluotuviisiinstanssia jayhdestä10instanssia.tämänavullavarmistettiin,ettäräjähdysäänetovatuseastisac mankuuloisiajasillointällöinsoihiemanerilainenversio. SeuraavissaesimerkeissäesitelläänkuinkaMasterAudionavullasoitetaanääniefektejä: //Esimerkki1:Ääniefektiammustentuhoutumisessa if(ammusosuijohonkin){ MasterAudio.PlaySound3D(OsumaRajahdysEfekti,transform); } else{ MasterAudio.PlaySound3D(HarhalaukausRajahdysEfekti,transform); } //Esimerkki2:Ääniefektipelinalkamiseen MasterAudio.PlaySound(PeliAlkaa); MasterAudionavullavoidaansoittaaefektejäniin2DCkuin3DCmuodossa.Tämä käytännössätarkoittaasitä,ettäjosräjähtääkauempana,sevoidaansoittaa3dc muodossa,jolloinsesoihiljempaakuinlähelläräjähtänytolisisoinut. 41 5.5 Reittihaku Reittihaunavullavoidaanlaskeareittejäkahdentaiuseammanobjektinvälille.ReittihaC kuottaahuomioonstaattisetobjektit,jotkaovatpisteidenvälillä,muttakehittyneemc mätratkaisutottavatmyöshuomioonmuutliikkuvatobjektit. TankHogsinreittihakuunkoitettiinmoniaeriratkaisujaennenkuinpäädyttiinnykyiseen. EnsimmäinenreittihakutoteutettiinUnityCpelimoottorinsisäänrakennetullatyökalulla.
42 Reitinhakuatehtäessäeiollutepäselvää,ettäreitinhakuapitääoptimoidatodellapaljon. TärkeimpänäjasuurimpanasuorituskyvynkannaltaolitiputtaanavigointiverkontarkC kuutta.kuviossa16nähdäännavigointiverkoneroteritarkkuuksilla. Kuvio16.Navigointiverkonerotoptimoinneilla:Ylempiepätarkkajaalempitarkka NavigointiverkontarkkuudenheikentämisenlisäksireitinhakuakäyttävientankkientoiC mintaamuutettiinniin,ettätankitpäivittävätreittinsämuutamanframenvälein,eikä jokaisellaframella.tämäolimahdollistatoteuttaahelpostikäyttämälläcoroutineja,kuc tenseuraavassaesimerkissänähdään: //Alkuperäinentoteutus:Lasketaanuusireittijokaisellaframella voidupdate(){ LaskeUusiReitti(transform.position,kohteenPosition); } //Parempitotetutus: //Käynnistetääncoroutinealussa,jokalaskeereitin0.5svälein voidstart(){ StartCoroutine( ReitinPaivitysCoroutine ); } IEnumeratorReitinPaivitysCoroutine(){ WaitForSecondslaskemisVali=newWaitForSeconds(0.5f); while(true){ //Laskeuusireitti LaskeUusiReitti(transform.position,kohteenPosition); //Nuku0.5sekuntiaennenseuraavaalaskemista yieldreturnlaskemisvali;
} } 43 Navigointiverkkoapitääpystyäjotenkinkäyttämäänkin.Tähänkäyttämämmelisäosa tarjoaavalmiitaratkaisuja.pelissäkäytimmeseekerckomponenttia,jollavoidaanlaskea reittikahdenpisteenvälille. SeuraavassaesimerkkiSeekerCkomponentinkäytöstäreitinlaskemiseen: privatepathnykyinenreitti; publicvoidlaskeuusireitti(vector3aloituspiste,vector3kohdepiste){ nykyinenreitti=getcomponent<seeker>.startpath(aloituspiste,kohdepiste); } SeekerinpalauttamaPathColiopitääsisälläänvectorPathCnimisenlistanpisteistä,joita seuraamallapäästäänaloituspisteestäkohteeseen. Seuraavassaesimerkissäkäydäänläpiyksinkertainenliikkuminenreitinmukaan: privatepathnykyinenreitti; privateintnykyinenpiste;//nollataanreitinlaskemisenyhteydessa publicvoidupdate(){ //Joseiolelaskettuareittia,lopetetaanfunktionlapikayminen if(nykyinenreitti==null)return; //Josnykyisenpisteenindeksionsuurempikuinreitinsisaltama, //niinlopetaanfunktionlapikayminen if(nykyinenpiste>nykyinenreitti.vectorpath.count)return; if(nykyinenpiste==nykyinenreitti.vectorpath.count){ Debug.Log(Ollaanreitinlopussa); nykyinenpiste++; nykyinenreitti=null; return; } Vector3nykyinenKohde=nykyinenReitti.vectorPath[nykyinenPiste]; //Suuntaseuraavallepisteelle Vector3suunta=(nykyinenKohde_transform.position).normalized; suunta*=time.deltatime; transform.translate(suunta); if(vector3.distance(transform.position,nykyinenkohde) <matkaseuraavallepisteelle){ nykyinenpiste++; } } 5.6 Pelihahmon toiminta Pelaajaohjaapelkästäänpäätankkia,muttavoikäyttääerikoisliikettä,käskeäapuritseuC raamaanpäätankkiasekäaktivoidaväliaikainenpäätankintehostaminen.pelaajantehc
44 tävänäonohjatatankkivastustajanjoukkojenluojatekoälyautomaattisestitähtääja ampuumuutamansekunninväleinlähintäkohdettakohti. Päätankinohjaaminentapahtuukoskettamallaruutualyhyestikohdasta,johonhaluaa hahmonmenevän.kosketuskohtamuunnetaanpisteeksipelimaailmassa,jonkajälkeen reittihaunkäyttämälleseekerckomponentilleannetaannykyinenpaikkasekäkosketusc kohtamaailmassa.seekerckomponentinpalauttamanpathcolionsisältämänlistanavulla tankkiliikutetaanpisteenluo. Apurienohjaustoimiisamallaajatuksella,muttapelaajaeikäskeniidenliikkua,vaan apuritautomaattisestihyökkäävätkohtivihollisentukikohtaa.josapureidenreitilletulee vihollisia,nepysähtyvättaistelemaan.joskohdekatoaaampumisetäisyydeltä,apurit lähteväthyökkäykseenuudelleen. Pelaajavoiaktivoidaerikoisliikkeen,jokaprototyypissätarkoittaahurrikaaniliikkeenakC tivoimista.erikoisliikekestääkolmesekuntiajasinäaikanapäätankintykkiosiopyörii lujaaampuensamallakuuliahurrikaanimaisestiympärilleen.erikoisliikkeenvoikäyttää kolmekertaataistelunaikana. Tämänlisäksipelaajavoiaktivoidapienentehostuksenlyhyeksiaikaa.TehostuksenaikaC napäähahmoliikkuusekäampuunopeamminjatehokkaammin.tehostuksenkäyttämic nenkuluttaaenergiaa,jotakertyypikkuhiljaapelinedetessäsekäsitävoidaankerätä kentältälöytyvistäenergiakolikoista. 5.7 Verkkoratkaisu 5.7.1 Suunnittelu TankHogsinverkkototeutustaeisuunniteltualuksikunnolla,koskaeiolluttarvittavaa tietotaitoa.tämänvuoksikokemustakerättiinunitynsisäänrakennetunnetworkingc paketinavullasiihenasti,ettäperusymmärrysverkkocohjelmointiinolisaavutettu. Tämänjälkeenlähdettiinsuunnittelemaanpysyvämpääratkaisua.Verkkoratkaisusta haluttiinmahdollisimmanyksinkertainen,koskaprojektiinvarattuaaikaaeihaluttukäytc tääpelkästäänyhdenosacalueenhiomiseenjaylläpitämiseen.suunnittelunjälkeenpääc
ajatuksenaolisaadapalvelimenylläpitopoisyrityksenharteiltajasiirtääsepilveen.täc hänexitgamesintarjoamaphotoncloudcpalvelu(pun)sopitäydellisesti. 45 5.7.2 Photon Cloudin toimintaperiaate PhotonCloudeliPUNonExitGamesintarjoamapilvipalveluverkkopelientekemiseen. UnitykäyttääomassapalvelussaanniinsanottuaserverCclientCpohjaa,jossayksipelaajisC tatoimiiserverinä.myöspunkäyttääservercclientcpohjaa,muttaheidänratkaisussaan kukaanpelaajistaeitoimiserverinä,vaanexitgamestarjoaaomankohdistetunpalvelic men.palvelimiaontarjollaympärimaailmaa. PUNtoimiilähessamallatavalla,kuinUnitynsisäänrakennettunetworkingCratkaisu.Sen APIonsamanlainenjaPUNtarjoaakintyökalun,jollavoidaankonvertoidaUnityCprojekti, jokakäyttääunitynomaanetworkingcratkaisuakäyttämäänpuninratkaisua. OttaakseenkäyttöönPUNin,kehittäjäjoutuuluomaantilinExitGamesinjärjestelmään, jossahänluopelin.pelilleasetetaanjärjestelmäännimi,jonkajälkeenjärjestelmägenec roiuniikinapplicationid:n,jokaonmuotoa06000e5ecxxxxc46eacxxxxcbb69xb000b.kyc seinenkoodiasetetaanpuninasetuksiinunityceditorissa.asetuksissamyösvalitaanmic hinpilveenyhdistetään. 5.7.3 Toteutus Jokaisellepeliobjektille,jokahaluttiinsynkronoidalaitteidenvälillä,pitiasettaaPhotonC ViewCkomponentti.Kyseinenkomponenttiyksilöiobjektitsekäsemahdollistaatiedon lähettämisentoisellelaitteellekyseisestäobjektista.photonviewckomponentistalöytyy isminecominaisuus,jonkaavullanähdään,kenelleobjektikuuluu. Objektejavoiinstansioidamonellaeritapaanäkymäänkaikillaclienteillä.KaikkipeliobC jektit,jotkaeivättarvinneetmyöhemminselitettyäobjectpoolcjärjestelmää,luotiin PhotonistalöytyvätPhotonNetwork.Instantiate( Prefab )CtaiPhotonNetC work.instantiatesceneobject( Prefab )Cmetodinavulla.ToinentapainstansioidapeliobC jektejaonkäyttääunitynomaainstantiatecmetodia.tämävaatiisen,ettäinstansoitaviin peliobjekteihinpitääerikseenkäsinluodatiedotphotonviewckomponenttiin.
PeliobjektienautomaattinensynkronointieitapahduautomaattisestikäyttämälläPhoC tonviewckomponenttia,vaansillepitääasettaajokinskriptitaitransformi,jonkasesynkc ronoi.photonviewckomponenttiavoikäyttäämyöspelkästäänlähettämäänrpcckäskyjä. Seuraavassaesimerkkitankkientykkiosionsynkronoimisesta: publicclassinterpolatedrotation:photon.monobehaviour { voidawake(){ //Disabloidaanskriptijosemmeomistapeliobjektia if(photonview.ismine)enabled=false; } voidonphotonserializeview(photonstreamstream,photonmessageinfoinfo){ //Josolemmelahettavaosapuoli if(stream.iswriting){ Quaternionrotaatio=transform.localRotation; stream.serialize(refrotaatio); }//Josvastaanotetaantietoa else{ Quaternionrotaatio=Quaternion.identity; stream.serialize(refrotaatio); transform.localrotation=rotaatio; } } } 46 5.8 Optimointi 5.8.1 Skriptien optimointi Unitylläohjelmoitaessavoidaantehdäyksinkertaisia,muttatehokkaitaoptimointeja. Seuraavassalistattunalyhyestimuutamatärkeäoptimointi,mitäkäytettiinTankHogsia luodessa(performanceoptimization2014.): 1. Eikäytetädynaamisiatyyppejä //Huonotapa Componentammus=GetComponent<Ammus>(); ammus.rajahda(); //Hyvätapa Ammusammus=GetComponent<Ammus>(); ammus.rajahda(); 2. Tallennetaanhaetutkomponentitmuistiineikähaetajokaframella publicclasshuonotapa:monobehaviour{ voidupdate(){
GetComponent<Pathfinder>().LaskeReitti(newVector3(10,10,10)); } } publicclassoikeatapa:monobehaviour{ privatepathfinderreittihaku; privatevector3suunta; voidawake(){ reittihaku=getcomponent<pathfinder>(); suunta=newvector3(10,10,10) } voidupdate(){ reittihaku.laskereitti(suunta); } } 3. Eipäivitetäkaikkeajokaisellaframella,vaankäytetääncoroutineja 47 WaitForSecondsetsimisVali; IEnumeratorEtsiVihollista(floataika){ etsimisvali=newwaitforseconds(aika); while(true){ //Etsivihollinen... //Nukuetsimisvälinverranennenkuinetsituudelleen yieldreturnetsimisvali; } } 5.8.2 Object Pool ObjectPool,eliniinsanottuobjektientaiesineidenallastus,toimiitodellatärkeässä osassaoptimointia.setarkoittaasitä,ettäobjektienluomisenjatuhoamisensijaanniitä kierrätetään,elipelinalussaluodaanvalmiiksitarvittavamääräobjekteja,joitaaktivoic daanjadeaktivoidaankäyttötarpeenmukaan.seuraavaksionesiteltyhyvinyksinkertaic nentoteutusobjectpoolingista: usingunityengine; usingsystem.collections.generic; publicclassobjectienkierratys{ privatestack<gameobject>saatavillaolevatobjektit; privategameobjectalkuperainenprefab; //Luokanconstructor publicobjectienkierratys(gameobjectprefab,intaltaanhaluttukoko) { alkuperainenprefab=prefab; saatavillaolevatobjektit=newstack<gameobject>(altaanhaluttukoko); LuoObjekteja(altaanHaluttuKoko); } privatevoidluoobjekteja(intcount){
for(inti=0;i<count;i++){ GameObjectpeliObjekti= Object.Instantiate(alkuperainenPrefab)asGameObject; peliobjekti.setactive(false); saatavillaolevatobjektit.push(peliobjekti); } } //Haetaanaltaasta(pinosta)yksiobjekti. //Josallasontyhjä,luodaanyksiobjektilisää publicgameobjecthaeobjektialtaasta() { if(saatavillaolevatobjektit.count==0){ LuoObjekteja(1); returnhaeobjektialtaasta(); } else{ returnsaatavillaolevatobjektit.pop(); } } //Palautetaanobjektialtaaseen. //Disabloidaanobjektijatyönnettäänsetakaisinpinoon publicvoidasetaobjektitakaisinaltaaseen(gameobjectpeliobjekti){ peliobjekti.setactive(false); saatavillaolevatobjektit.push(peliobjekti); } } 48 5.8.3 Dynamic batching Dynamicbatchingelidynaaminenpiirtokomentojen(Drawcall)yhdistäminentarkoittaa sitä,ettädynaamistenpeliobjektienpiirtäminenyhdistetäänyhdenpiirtokomennonalle. Yhdistääkseenobjektitniidentäytyytäyttäätarvitutkriteerit.Yhdistettävienobjektien kuuluukäyttääsamaamateriaaliajaverteksiattribuuttienmääräpitääollaalle900. Tekstuuriatlasoinninavullasaadaaneriobjektitkäyttämäänsamaamateriaalia,mutta verteksiattribuuttienpitäminenalhaisenavaatiisuurempiaratkaisuja. TankHogsiatehdessäsuurinongelmaolisaadatankkienverteksiattribuutitalhaiseksi. Tankeistapoistettiinhyvinpaljongeometriaa,kutentankkienpohjat,tykinpohjatsekä ylipäänsämallejajouduttiinyksinkertaistamaan.tämänlisäksitankitkoostettiinuseamc masta3dcverkosta,jotkakoostettiinyhteenisompaan. Toteutetussapelissäkaikkitankit,kerättävätkolikotjarakennuksetmenevätkeskenään muutamaanpiirtokomentoon.kuviossa17näkyytestiscene,jossapiirtokomentojen määräätestattiin.
49 Kuvio17.Piirtokomentojentestaamiseenluotutestiscene 5.8.4 Static batching StaticbatchingelistaattinenpiirtokomentojenyhdistäminenonUnityntarjoamatoinen tapa,jollapystyyvähentämäänpiirtokomentojenmäärää.setoimiilähessamallatavalla kuindynamicbatching,muttasilläerolla,ettästaattisestiyhdistetytobjektiteivätsaa liikkuascenessäjaniissäeiolerajoitustaverteksimäärille.jottaobjektivoistaattisesti yhdistyä,sepitääerikseenmerkitäunityceditorissastaattiseksijasenpitääjaksaasama materiaalimuidenkanssa. TankHogsiatehdessästaticbatchingiakäytettiintaustaelementteihinsekätaistelualuC eenrakennuksiinjakiviin. 5.8.5 Tekstuurien pakkaus MobiililaitteilletehdessätekstuurejaonkäytännössäpakkopakatavähäisenmuistintaC kia.pakkaamattomattekstuuritkuluttavatpaljonmuistia,jokavoijohtaasiihen,ettäpeli taijopaitselaitevoikaatuapelinollessakäynnissä.iosclaitteetkäyttävättekstuuriforc maattinaanpvrtccformaattia.kyseinenformaattimahdollistaatekstuurinpakkauksen jokokahdellataineljälläbitilläperpikseli.esimerkiksikäyttöliittymäntekstuuriatlaksen kokopakkaamattomanaon64mbjapvrtccformaattiinpakattuna8mb.