top of page
THINK 1

Vanuit de eerste Check van mijn Software Analyseren beroepstaak heb ik al geconstateerd dat de soort game-analyse die wij willen uitvoeren met behulp van game analytics, een “descriptive type” is. Mijn verwachtingen zijn dan ook dat ik in ieder geval met databases zal moeten werken en dus mijn MySQL kennis weer zal moeten opfrissen wanneer dat nodig is.

Een bron dat ik heb gevonden om een connectie te maken tussen Unity 5 en een MySQL database is de volgende video: https://www.youtube.com/watch?v=EByl95OMG2o&index=1

Uit deze bron is me al gelijk duidelijk geworden dat het ontwerp 2 fases zal hebben.
1. Het offline laten functioneren met de Unity Editor.
2. De database online krijgen en verbinding maken met de spelers op hun Android apparaten.

Het resultaat dat ik hoop te behalen is dat ik een document heb met in duidelijke stappen het ontwerp om het realisatieproces voor beide fases zonder problemen te laten verlopen voor ons spel.

Software: Ontwerpen

MAKE 1

Fase 1

Een database ontwerpen/opzetten

Zoals ik al in de eerste cycle van mijn Software Analyseren had gemeld willen we weten welke levels van ons wel of niet goed gedesigned zijn. Daarom zou ik de volgende 4 data willen ophalen.

- Hoe vaak swipen spelers in een bepaalde level?
- Hoeveel friendly blobs worden er per level verzameld?
- Hoe lang duurt het voor de speler om een bepaalde level uit te spelen?
- en natuurlijk is het wel handig om te weten om welk level het draait bij deze data.

CHECK 1

(Na eerste Software Realisatie cycle)
Na de eerste cycle van mijn Software Realisatie te hebben gedaan waarbij ik dit ontwerp nodig had, kan ik zeggen dat met behulp van dit ontwerp je er best wel zonder problemen uit komt. Natuurlijk ben ik zelf niet de beste testpersoon voor mijn zelfgemaakte ontwerp en heb ik daarom ook het ontwerp laten zien aan een projectgenoot die zelf ook nog nooit met locale databases en php had gewerkt. Hij vond dat zelfs zonder php kennis, het ontwerp wel te volgen was en door direct over te typen het zelf ook wist te recreëren. Het enige wat er nog wel ontbrak waren wat duidelijke plaatjes over de phpMyAdmin, omdat dit nog best wel overweldigend kan zijn als je het voor de eerste keer ziet. Hij wist namelijk niet zeker of hij dat gedeelte wel of niet goed had gedaan en kwam er pas achteraf achter.

(Over het algemeen over deze cycle)
Zoals al te merken is heb ik deze cycle niet mijn doel behaald, omdat ik het ontwerp maken voor een offline versie die vanaf de Unity Editor werkt al veel werk vond. Daarom heb ik besloten om het tweede fase voor een volgende cycle te laten. Ongeacht dat vind ik dat het hele proces van het ontwerpen redelijk soepel verliep, omdat ik steeds snel oplossingen vond tot mijn problemen.

THINK 2

Mijn doel deze sprint is: De database online krijgen en verbinding maken met de spelers op hun Android apparaten (dus de tweede fase ontwerpen). Dit omdat ik mijn vorige cycle niet toekwam aan deze tweede fase van mijn ontwerp, hoop ik het dit keer wel te behalen. Ik zal ook dezelfde video bron gebruiken zoals de vorige keer alleen dan een latere deel: https://www.youtube.com/watch?v=3Im3veamB-s&t=21s .
Ook zal ik de feedback meenemen van mijn vorige ontwerp over het gebrek aan phpMyAdmin screenshots en ze dit keer wel toevoegen.

MAKE 2

Fase 2

Deze fase is heel wat globaler geschreven omdat de stappen die je moet uitvoeren redelijk kunnen verschillen per host service dat je kiest. Mijn stappen zijn volgens het 000webhost.com hosting service.

Een online gratis hosting service vinden.
De eerste stap om onze tool online te laten functioneren is om het daadwerkelijk te hosten vanaf een online hosting service. Dit zorgt ervoor dat onze database en PHP script online staan en zo vanaf elk apparaat met internetverbinding bereikt kunnen worden.

Hiervoor heb ik even rondgezocht naar de top gratis hosting services en vond de volgende resultaten: ·
- https://www.000webhost.com/
- https://www.biz.nf/
- https://www.freehostingeu.com/
- https://www.awardspace.com/?aid=MjUyNjE5MjIxOTI0OTQ1MDUyODQ3MTg4
- https://byet.host/free-hosting

Je kan natuurlijk ook altijd je eigen hosting service vinden, of voor eentje een hostingpakket aanschaffen. Dit hangt helemaal af van wat je nodig hebt en in mijn geval is het alleen maar een schoolproject waarvan we leveldata willen verzamelen voor leveldesigntesting. Daarom ben ik ook gegaan voor degene die ook in mijn videobron werd gebruikt “000webhost.com”, aangezien dit ook de eerste is die verschijnt in je google zoekresultaten als je ‘’free hosting services” intypt. Het enige waar je op moet letten is dat het gebruik maakt van MySQL en PHP, als extra’tje is de phpMyAdmin natuurlijk ook handig om de rest van het ontwerp te volgen.


Offline tabel exporteren
Hier heb ik niet veel over op te merken in mijn design, ik heb een screenshot voor het exporteren vanaf het phpMyAdmin toegevoegd omdat dit volgens mijn vorige check nogal ontbrak aan mijn ontwerp.

Online database maken
De online database aanmaken verschilt echt per service die gekozen word en bij sommige services heb je het recht om direct vanaf het phpMyAdmin een database aan te maken, maar bij anderen dus weer niet zoals degene die ik had uitgekozen. Omdat het behandelen van elke service hun panel teveel werk is, heb ik hier alleen die van 000webhost.com met een screenshot behandeld.

Geëxporteerde tabel importeren in de online database.
Hieronder is een screenshot te zien van het onderdeel uit m'n ontwerp.

CHECK 2

Ik was over het algemeen wel blij met mijn ontwerp aangezien ik dit keer ook wat duidelijkere screenshots over het phpMyAdmin gedeelte er in heb verwerkt, maar nadat ik dan ook werkelijk mijn tweede software realisatie cycle had gedaan kwam ik er achter dat het niet echt rekening hield met situaties die fout konden gaan. De grootste probleem waar ik last van had was namelijk dat de server van het 000webhost plat lag en daarom ik het idee had dat ik iets fout had gedaan en alles opnieuw wou doen. Dit is dan ook afhankelijk van welke service je kiest, bij een betaalde service zou je hier namelijk minder snel last van hebben. Ook als je dus een andere service kiest, heb je natuurlijk een andere paneel waar de file management en de database management worden geregeld. Dit zorgt ervoor dat je een aantal screenshots niet kan volgen en dus misschien iets fout kan doen. Mijn ontwerp voldoet dus niet echt aan de gewenste kwaliteitsattributen die je voor een ontwerp zou willen hebben. Maar bereikt uiteindelijk wel het doel waarvoor het gemaakt is, met deze gemixte gevoelens kan ik alsnog zeggen dat ik wel tevreden ben met het resultaat.

CONTEXT 2

Om ook analytics data van ons spel te verzamelen vanaf Android apparaten en niet alleen meer vanaf een lokale Unity Editor speelsessie, moet de tool die ik in de eerste TMC heb ontworpen ook via het internet functioneren.

LEARNINGS 2

Wat ik sowieso heb geleerd deze cycle is dat een ontwerp maken altijd nog lastig is, je moet rekening houden met zoveel factoren die, bij de persoon dat het ontwerp gebruikt voor een implementatie in hun eigen software, fout kunnen gaan. Je kan namelijk ook niet de kennis inschatten van elke persoon die het ontwerp gaat gebruiken. Eigenlijk zou je meerdere testen over een ontwerp heen moeten gooien en uit elke resultaat steeds weer onderdelen verbeteren, totdat de testen 100% van alle keren slagen. Behalve dat heb ik heel veel kennis opgedaan over hoe hosting services nu precies werken en wat het verschil is tussen een lokale database onderhouden en daadwerkelijk ook eentje online krijgen.

CONTEXT 1

Om mijn beroepstaak Software: Ontwerpen te bewijzen zal ik een ontwerp maken voor het creëren en implementeren van een eigen Analytics Tool. Dit omdat het implementeren van de bestaande Analytics tools niet helemaal goed verliep en wij voor onze game nog steeds data willen ophalen om de speler resultaten over de behaalde levels te analyseren.

LEARNINGS 1

In ieder geval heb ik deze cycle leren omgaan met een nieuwe programmeertaal genaamd PHP, waar ik eerst nog nooit mee heb gewerkt. Behalve dat heb ik ontdekt dat ik soms te veel werk per cycle probeer te doen. Dit is ook iets wat ik erg aan mijzelf merk bij mijn Git-Commits. Waar mijn projectpartners heel vaak commits maken tussendoor, maar ikzelf pas helemaal op het eind een commit maak wanneer het dan ook echt af is. Deze gewoonte van mij is dan ook de reden waarom ik binnen deze cycle niet mijn doel heb behaald dat ik bij mijn Think had gesteld.

Deze data willen we opslaan en daarom heb ik hier een database tabel voor gemaakt LevelStats en de variabelen allemaal er in aangemaakt.
 

  • De Level_Index wordt een geheel getal met die waarschijnlijk voor ons project niet meer dan 3 karakters aan een level ID hoeft te hebben. Wij gaan namelijk niet meer dan 999 level maken.

  • De Times_Swiped kan vast wel erg mishandeld worden door spelers die onnodig vaak willen swipen in een level. Daardoor heb ik daar overbodig veel karakter ruimte voor gegeven binnen de database. Ik ga ervan uit dat geen speler per level meer dan 99.999.999.999 keer gaat swipen.

  • Precies hetzelfde geld natuurlijk voor de Time_Completed, als een speler zijn spel de hele tijd aan zou laten staan zouden de secondes ook aardig kunnen oplopen.

  • Jellies_Collected geef ik maar 1 karakter ruimte omdat je nooit meer dan 3 Jellies kan hebben per level, dus laat staan meer dan 9.


Geen van deze variabelen zijn een primary-key of unique, omdat ze van ons allemaal vaker mogen voorkomen. Bijvoorbeeld de Level_Index, meerdere spelers kunnen meerdere keren hetzelfde level hebben uitgespeeld.

Uiteindelijk moet je lokaal een echte database opzetten en het bovenstaande tabel er in aanmaken.
Dit heb ik gedaan door middel van XAMPP en phpMyAdmin zonder enige problemen, door de instructies in mijn bron (het filmpje) te volgen. Voor het verkrijgen van XAMPP heb ik de volgende bron gebruikt: -
https://www.apachefriends.org/index.html.

Een manier vinden om data in te voeren in de database via een externe bron.

Vervolgens hebben we een manier nodig om data in de Database te kunnen invoeren vanaf Unity.

Dit zou via een externe script moeten gaan die altijd te bereiken is en die we daarna via een Unity script kunnen aanroepen. Uit mijn bron (het filmpje) werd al gelijk duidelijk dat ik een php script hiervoor zou moeten schrijven. Aangezien ik geen ervaring heb met php, heb ik gedaan wat ik altijd doe: een online cursus volgen om de programmeertaal te begrijpen. https://www.codecademy.com/learn/php

Eenmaal een basisbegrip van php te hebben, ben ik gelijk begonnen met een basisversie van de script zonder werkelijke serverdata.

Ik kreeg in de editor die ik gebruikte de volgende melding “Cannot validate the php file”, na een korte google-sessie was dit ook verholpen d.m.v. de volgende bron: https://github.com/Microsoft/vscode/issues/251

Ik kwam al snel op nog een probleem toen ik de code schreef om verbinding te maken met de database.
In mijn bron (het filmpje) gebruikte ze namelijk een verouderde versie van PHP en daarom waren een aantal functies veranderd. Met behulp van de volgende bron heb ik dit probleem verholpen.
http://php.net/manual/en/book.mysqli.php


Connectie met Unity

De code binnen Unity viel gelukkig wel erg mee het enige wat ik als bron erbij moest pakken was het volgende: https://docs.unity3d.com/ScriptReference/WWW.html en https://docs.unity3d.com/ScriptReference/WWWForm.html

Het enige probleem wat ik bij dit gedeelte had, was dat de Form.Addfield methode alleen integers en strings aanneemt als tweede argument om op te sturen. Daarom heb ik bij de timeCompleted variabele ervoor gezorgd dat deze naar een string wordt omgezet met .ToString(“#.00”) .
De waarde die ik hierbinnen aangeef zorgt ervoor dat de float waarde wordt afgekapt bij de 2 decimalen.
Dit was de bron waardoor ik er achter kwam: - https://docs.unity3d.com/ScriptReference/WWWForm.AddField.html

Verbinding maken tussen Unity en de online server.
Dit is het moment dat ik me eigenlijk realiseerde dat je wachtwoord tot je database unencrypted in je php script te laten staan misschien niet de meest veilige handeling is en heb daarom een bron in mijn ontwerp geplaatst met uitleg over hoe je je wachtwoord zou kunnen encrypten.

Behalve dat heb ik een uitleg gegeven met een voorbeeld van wat elke variabele (voor de verbinding) in de PHP script die we in de eerste fase hebben gemaakt precies inhoudt.

Alleen laten uitvoeren als het apparaat een Android is.

Dit laatste gedeelte is niets anders dan een if-statement schrijven om de regel waar je de methode van het versturen van de data aanroept.

https://docs.unity3d.com/ScriptReference/Application-platform.html

https://docs.unity3d.com/ScriptReference/RuntimePlatform.html


Deze bovenstaande 2 bronnen waren het enige wat ik daar nog extra voor nodig had als bron.

bottom of page