Grafiskt Utbildningscenter VT 2015 FPS Controller asset Student Handledare Håkan Johannsson Per Djerf
Abstract Often when people who aren't professional game developers want to make a game they build their gam in an open SDK (Software Development Kit) game engine. Unity Engine is an open SDK that is popular for hobby game developers. In school the last one and a half year i have learned how to produce games i Unity. My favorite game genre is close quarter combat First Person Shooters. Call Of Duty and Counter Strike is two typical games in this genre. I have for a long time dreamed about making my own FPS game but i didn't know how to start or how to solve mechanical problems. And i saw on social medias around game development that i wasn't alone with this problem. So for examination project i decided to develop a asset for unity that would contain a pre fabrication object with all the basic necessary function that you would need to start up your own FPS game development. I did some research on different functions in Unity and decided that the best way to develop the asset was to code the framework in C-sharp witch is one of the code language built into unity. The project took longer then expected and i ran into a numbers of problems throughout the work process. Since i never before had worked in C-sharp i had to spend a lot of time to learn the syntax of the code language and its different functionality. 2
Innehållsförteckning 1 Bakgrund 4 2 Syfte. 5 2.2 Frågeställning 2.3 Avgränsningar 3 Material och källor 6 4 Genomförande.. 7 4.1 Bakgrundsanalys 4.2 Huvudarbete 4.3 Slutarbete 5 Resultat.. 8 6 Diskussion. 9 7 Källförteckning. 10 8 Bilagor 11 3
1 Bakgrund Mitt favorit typ av spel har i många år varit skjutspel i första persons perspektiv och ur alla timmar som jag har suttit och spelat föddes idéen och inspirationen till att göra mitt egna spel som skulle innehålla de funktioner som jag anser vara viktiga för att spelet ska vara bra. Och eftersom undervisningen i skolan innehöll praktiskt undervisning i Unity Engine så såg jag min chans att förverkliga en dröm som jag har haft under en längre tid. I början av gymnasiearbetstiden var planen att med två andra personer utveckla ett simpelt spelkoncept. Men grupparbetet funkade inte och vi kom inte framåt i processen. Så projektet lades ner och jag bestämde mig för att fortsätta på egen hand. Men pågrund av omfamningen att utveckla ett spel själv skulle tiden som avsattes för att göra projektet inte räckte till så la jag mitt fokus på grundmekaniken i spelet. 4
2.1 Syfte Syftet med komponenten so jag bestämt mg för att göra var att underlätta för andra personer som delade mitt intresse för FPS spel. Mitt mål var att kunna erbjuda en komponent som är lätt att använda och som har möjligheter att finjustera alla funktionerna för att få dem att passa in i vilket spel som helst. Jag ville även ge användaren möjlighet att genom ett knapptryck stänga av funktioner som inte är önskade. Dem stora kunskaps områdena som jag fick lägga fokus på var Unitys fysikmotors funktioner och hur jag kan tillämpa dem. Men även matematiska området trigonometri som behandlar vinklar och distanser i trianglar ansåg jag vara viktigt för att kunna få vissa funktioner att funka enligt önskemål. 2.2 Frågeställningar: dessa frågeställningar blev huvudfokus innan jag skulle börja bygga upp systemet. 1: Vilket kodspråk skulle jag använda mig av. Java script och C-sharp är dem två språken som finn tillgängliga i Unity. Vilket språk har mest fördelar och bäst stabilitet i funktionerna. 2: Vilken typ av fysik skulle jag använda mig av. Valet stod mellan Rigidbody eller Character controler. Efterforskningen kring de båda alternativen blev att ta reda på vilka funktioner dem båda har och vilken komponent som skulle ge mig bästa grunden för att forma mekaniken enligt mina önskemål. 3: Hur många special funktioner kunde jag bygga in i systemet utan att påverka spelmotorns prestanda överlag. Och skulle funktionerna prestera på önskad nivå utan att föra fel med sig som skulle påverka spelarens upplevelse 4: Vilken typ av matte skulle jag behöva tillämpa för att kunna räkna ut hur jag skulle få fysiken att fungera som jag ville. 2.3 Avgränsningar: I ett FPS spel är styrningen och fysiken bara en del av hela konceptet. Animationer och 3d modeler så som spelkaraktärer och vapen är även en stor del för att få en spelkänsla. Men pågrund av tidsbrist och brist i kunskap kring 3d modellering så struntade jag i att lägga till sådana funktioner. Men jag såg till att möjligheten finns för användaren att lägga till det vid önskemål. 5
3 Material och källor Materialet som jag använt mig av var Unity SDK som huvud program då det var den spel plattformen som mitt arbete skulle användas på. Till Unity följer programmet Monodevelop med som är Unitys egna kod redigeringsprogram. Unity är ett omtalat internationellt företag med miljontals användare varje år. Därför ansåg jag att det var ett pålitligt program att använda för mitt ändamål. Under första delen av arbetet när den största delen av efterforskning gjordes märkte jag att det i princip inte fanns någon litteratur i form av böcker. Men däremot har Unity en hemsida med dokumentation över alla funktioner som finns tillgängliga i programmet. Eftersom företaget själva la ut informationen om programmet på deras hemsida så tolkade jag materialet och källan som säker källa för hämtning av information. För information om kodningens uppbyggnad använde jag mig även av Microsofts hemsida då dem är företaget som skapat programmeringsspråket C- sharp. Hade även under arbetets gång hjälp av extralärare som var utbildade i ämnet och som hade många års erfarenhet av att göra spel i Unity SDK. Deras hjälp och kunskaper tolkade jag därför som högst trovärdiga. 6
4 Genomförande 4.1 Första tiden ägnades åt att samla information om området och sortera ut va som vad behövligt till vilken del av arbetet. Skrev ut dokument hämtade från Unitys egna hemsida om spelmotorn, dess funktioner och komponenter. Mycket av informationen handlade om Rigidbody och Character controller fysikkomponenterna, men även information om kodspråket C-sharp och dess syntax. Sådan information hämtades senare även från Microsofts hemsida vid behov. 4.2 Character controller komponenten var den fysikkomponenten som verkade vara lättast att använda då den redan hade många funktioner inbyggda i sig som skulle kräva en del kodning för Rigidbody. Därav blev valet att använda character controller. Efter att bakgrundsanalysen var klar spenderades dem första veckorna på att bygga upp grunden för komponenten och få dem simpla rörelsefunktionerna att funka. Dessa funktioner utgjorde grunden för resten av funktionerna. Pågrund av omständigheter med lärarbyte och andra skoluppgifter var arbetet efter planeringen mot vecka två. Men arbetet fortsatte och och tempot ökade gradvis. Deadlinen för arbete sköts upp från sin ursprungliga vecka sju. Pågrund av denna uppskjutning och problem med character controller komponentens begränsningar byttes den ut mot Rigibody. De grundsystem som gjorts tidigare programmerades om för att passa till Rigidbody komponenten. Specialfunktionerna begränsades också till bara double jump och wall running 4.3 Slutskedet av arbetet bestod av optimering av funktionerna v 15-16. Sedan hittades vissa brister i systemet och sista tiden gick åt till att koda om grund systemet för wall running funktionen då det fanns alldeles för många bugar i systemet. 7
5 Resultat Efter veckor med arbete och omständigheter blev komponenten klar för användning. Styrsystemet funkar och specialfunktionerna Double jump och Wall running fungerade som önskat. Uppskattningen av tiden visade sig inte stämma överens med den tiden allting tog. Att bygga upp grund rörelsefunktionerna gick bättre än förväntat men däremot så blev specialfunktionerna mer invecklade än förväntan och krävde längre och mer invecklad programmering. Men tillslut fungerade allting enligt önskemål. Frågeställningarna blev fler och mer fördjupande under processens gång och vissa antagningar som gjordes i början av projektet visade sig inte stämma överens med vad som togs fram i slutändan. Eftersom att efter halva tiden så byttes character controller komponenten ut mot Rigidbody så blev programmeringen av funktionerna helt annorlunda än vad som hade använts tidigare innan bytet. Slutligen blev resultatet av arbetet med nya kunskaper att ett projekt av den här storleken mer tid och energikrävande mot vad som hade förväntats. Allt detta trots att projektet skalades ner från den första idéen av ett komplett spel till att bara lägga fokus på själva styrsystemet bakom. 8
6 Diskussion Projektet har överlag varit väldigt roligt och intressant. Har lärt mig väldigt på vägen trots att allting inte gick som det var planerat från först början. När min idé för gymnasiearbetet var att göra ett helt spel var planen överambitiös och inte tids realistisk. Har lärt mig med tiden och arbetets gång att saker och ting inom spel utveckling tar längre tid och att när som helst kan saker sluta fungera utan någon egentlig förklaring. Och eftersom att jag aldrig tidigare jobbat med C-sharp så blev det en utmaning i sig att lära sig hur det fungerar och vad som är faktiskt möjligt att göra. Eftersom att jag bytte ut huvud fysikkomponenten i mitt arbete efter ungefär halva tiden så insåg jag att efterforskningen bakom komponenternas funktion var på en alldeles för grundlig nivå. Och senare i arbetsprocessen blev jag tvungen pågrund av tidsbrist tvungen att minimera antalet specialfunktioner till enbart två. Detta var ändå bra då det fick mig att vara mer noggrann med varje liten del. Och det gjorde att jag lärde mig massor om hur Unitys fysikmotor fungerar. Att arbeta inom en strikt tidsram var väldigt stressande under vissa moment men samtidig uppbyggligt då jag lärde mig att prioritera min tid och att kunna begränsa mig till att bara göra vissa saker. Och eftersom mina förkunskaper om Unitys funktioner och programmering var på en väldigt grundläggande nivå så blev utmaningarna väldigt stora då jag var tvungen att läsa mig till det mesta själv. Men det positiva bakom det hela är att jag har lärt mig massor kring spelutveckling men även skapat nya kontakter inom branschen som jag hoppas på kunna använda mig utav särare efter min gymnasietid. Hade även underskattat komplexiteten av att redogöra allt i en vetenskaplig rapport. Men alla dessa erfarenhets bär jag mäed mig i framtida studier och projekt. 9
Källförteckning Unity Technologies http://docs.unity3d.com/manual/physicssection.html http://docs.unity3d.com/scriptreference/index.html Microsoft C-sharp guide https://msdn.microsoft.com/en-us/library/67ef8sbd.aspx 10
Bilagor använda fysik komponenter Färdiga komponenten 11
Arbetsplan Bakgrund: Jag kommer jobba i Unity 3D SDK (software development kit). det är ett program skapat för att utveckla spel och appar. Mitt projekt kommer handla om att koda ett styrsystem som ska kunna tillämpas på karaktärer i olika sorters spel. Därför kommer komponenten behöva många olika funktioner men samtidigt vara lätt att använda för folk som inte har varit med och skapat den. Syfte: Syftet med projektet är att skapa en produkt som jag själv har känt ett behov utav tidigare. personer som inte har tid eller kunskap att göra det själva ska kunna ladda ner produkten som en fil och tillämpa i sitt spel lätt och smidigt Metod: Kommer söka runt på internet efter andra som har gjort liknande saker tidigare för att få inspiration och idéer. Har även en ämnes kunnig lärare som ja kan bolla ideér med och komma på lösningar på problem under processen. Jag kommer inte behöva några externa redskap förutom Unity och Monodevelop som är ett program för att skriva koder. Unity stödjer flera typer av kodspråk däribland C-sharp vilket är det Kodspråket jag har bestämt mig att använda mig av. jag väljer det framför tillexempel Java pågrund av att det är effektivare kodspråk med fler användningsområden än Java. Målgrupp: Min målgrupp har ingen bestämd åldersgrupp utan jag riktar mig till folk som är nya inom spelbranschen precis som jag. folk som är i situationen att dem har en ide som dem vill verkställa men vet inte riktigt hur dem ska göra. Medium: Ska skapa produkten och om jag är nöjd och vill ge ut den så kommer jag försöka göra reklam för den på twitter och via folk jag känner över internet. Dokumentation: Dokumentation sker på Tumblr 12
Planering Vecka Del klar 47 Basic styrsystem klart 48 49 50 Dublejump klart 51 52 1 Boost slide klart 2 Optimering 3 Optimering / första utkast raport 4 Buggfixar 5 Buggfixar 6 Sista check på systemet / inlämning rapport 7 Redovisning Arbetes logg v 47-48 samlades information v 49-52 kodade jag det grundläggande styrsystemet v 1-3 började jobba på specialfunktionerna v 4 insåg bristerna och begränsningarna med character controller och bestämde mig för att byta till Rigidbody v 5-8 arbetade om grunderna i styrningen för att anpassa efter Rigidbody komponenten v 9-12 byggde upp specialfunktionerna Double jump, wall run v 13-14 la till begränsad sprint och wall run time v 15-18 optimerade funktionerna, ändrade vissa funktioners grundkod för att få allt att fungera bättre 13