De deadline van vrijdag 29 maart kwam steeds dichter bij en ik had nog alsmaar geen idee hoe ik het idee kon uitbouwen tot een echte puzzel.
Op 28 maart heb ik een laatste update gegeven waarin ik laat zien dat ik een puzzel kan maken. Nou is alleen een puzzel niet voldoende. Er moet meer omheen. Daarom ben ik aan de slag gegaan met het verhalende aspect, een gebruikersinterface en het laden en ontladen van puzzels. Ook heb ik de puzzelelementen die de speler volgen een model gegeven zodat het lijkt op een bewakingscamera.
Hieronder ga ik een uitgebreide uitleg geven over de werking van het spel. Het complete Unity project staat op GitHub voor als je het zelf in werking wilt zien: https://github.com/ArjoNagelhout/ARGame
Plaatsing en herpositionering van het spel
Met augmented reality is het belangrijkste aspect dat de virtuele wereld in de echte wereld komt. Omdat mijn puzzel één vlak nodig heeft om op te staan, wil ik dat de speler deze uit kan kiezen. Wanneer het spel begint heeft de speler de mogelijkheid om het bord ergens te plaatsen. Deze plek kan dan bevestigd worden door op de knop te drukken. Ook moet de speler het spel mee kunnen nemen naar een andere plek. Dit herpositioneren heeft ook een knop gekregen.
Tijdens het plaatsen en herpositioneren wordt in het midden van het scherm gekeken of er een vlak gedetecteerd is en als dat het geval is wordt de positie van het te plaatsen object geüpdatet. Om ervoor te zorgen dat bij de eerste keer zonder bord het duidelijk is waar je het plaatst is er een plaatsingsindicator toegevoegd.
In onderstaande video is te zien hoe het plaatsen en herpositioneren werkt.
Onderstaande code zorgt ervoor dat het plaatsen en herpositioneren werkt:

Het laden van levels
Omdat ik wil dat de ervaring speler zo vloeiend mogelijk is. Wil ik dat wanneer de speler het level haalt, deze direct naar het volgende level gaat. Omdat in dat geval er niet gewisseld kan worden van scenes, heb ik ervoor gekozen om de levels te maken van prefabs. Deze prefabs worden vervolgens verwisseld wanneer de speler het level haalt.
Er is een object genaamd BoardLoader. Deze heeft een array met GameBoard prefabs. Hij heeft tevens de functie LoadLevel(id) zodat hij een nieuw GameBoard kan laden. Bij deze functie wordt het oude bord weggedaan en komt er een nieuwe voor in de plaats. Zie link voor de code: https://github.com/ArjoNagelhout/ARGame/blob/master/ARGame-project/Assets/Scripts/BoardLoader.cs
Door middel van een Animator wordt het bord omhoog en omlaag verplaatst om ze te wisselen.

Het halen van een level
Een GameBoard prefab heeft in het script de functie CheckProgress. Deze functie checkt of alle Target objecten in aanraking zijn met hun corresponderende FollowingCamera object.
Github Link: https://github.com/ArjoNagelhout/ARGame/blob/master/ARGame-project/Assets/Scripts/GameBoard.cs

De levels zijn opgebouwd uit de volgende onderdelen:

FollowingCamera

Een FollowingCamera heeft twee functies: Het beweegt naar de speler toe met de functie MoveTowardsPosition en met LookAtPosition wordt CameraHead gedraaid naar de speler.

Gebruikersinterface
De gebruikersinterface bestaat uit een startscherm, een eindscherm en een UI overlay. De UI overlay bestaat op zijn beurt uit drie elementen: De LevelDescription, RepositionButton en PlacementPopup. Hieronder staan de mockups:



Animaties zijn ook toegevoegd voor de UI op dezelfde manier als bij het GameBoard.
Reflectie
Ik heb erg genoten van werken met Unity. Vanaf 2014 heb ik gewerkt met GameMaker voor het maken van games. Ik heb altijd de stap naar Unity uitgesteld omdat ik dan een terugval zou maken in complexiteit van wat ik kan maken. Doordat ik met de module Building Playful Worlds ben begonnen aan Unity vind ik het nu heel fijn om mee te werken. Dit heeft voornamelijk te maken met het feit dat met Unity een stuk gestructureerder te werken is dan met GameMaker. Dingen als parenting, scripting, componenten en prefabs zijn een grote upgrade van wat in GameMaker is. Daarnaast biedt C# meer mogelijkheden dan GML.
In de toekomst ga ik voor het maken van prototypes zeker vaker Unity gebruiken. Voor mijn interesse in augmented reality is het heel belangrijk geweest om te leren werken met Unity. Nu ben ik in staat om mijn ideeën voor de technologie naast visualiseren ook interactief te maken.


