Hellia

About the project

Dit is het eind project voor het tweede school jaar. Hier werkte ik samen met 1 andere game developer en 4 artists. Als project moesten we een game over een mythe maken. We kregen een lijst met mythes en hebben uiteindelijk voor de mythe hel gekozen met het idee om een puzzle game te maken. De eerste week hebben we onze tijd genomen om goed te bedenken hoe de game zou moeten werken en of het ook wel een goede game idee is. Daarna zijn we snel aan de slag gegaan om te zorgen aan het eind van de eerste sprint al een werkende game te hebben. Gelukkig is het project erg goed gegaan en hebben wij als groepje ook de 1ste plek gewonnen op de projecten markt waar we werden beoordeeld door mensen uit het bedrijfs leven.

A

school, groeps opdracht, game

Unity

C#

Lead programmer, Git manager

INTRO - CUTSCENE

Player

Voor de player movement heb ik de Unity Character controller gebruikt. Hierdoor was de controller zelf snel gemaakt. In sprint 2 van het project ben ik begonnen met de animaties erin zetten. En deze aan te sturen via het PlayerMovement script. Toen de player werkte moest er nog veel getweaked worden. De movement speed moest ongeveer gelijk zijn aan de animation. tijdens het maken van deze movement was er een bugg dat wanneer de speler tegen een muur omlaag viel dat hij zo snel ging dat hij gewoon naar de grond teleporten. Na wat onderzoek en testen kwam ik erachter dat het aan het gravity system lag. Toen ik de gravity value omlaag zetten was het probleem opgelost.

Pushable rocks

De pushable rock is een van de core mechanics van de game. Door het dieuwen van een stenen block kon je een pad vrij maken of een brug maken waar je overheen kan lopen. In het begin had ik een systeem gemaakt dat je meerdere blokken achter elkaar liet dieuwen maar voor level design was dit niet logisch en naar max 1 block per keer veranderd. Om het block nog interessanter te maken hadden wij ook gaten in de grond toegevoegd waar je de steen in kon dieuwen zodat je over het gat kan lopen. Toen beide van deze system werkte had ik een move methode gemaakt om ze naar de positie te lerpen. de speed was hoog genoeg gezet dat de speler het block niet 2x zou kunnen dieuwen en zag er goed uit.
Een van de problemen met de movables was dat als de speler er langs liep dat hij ook al werd gedieuwed. Dit moest opgelost worden. Daarom heb ik een methode geschreven die checked of de speler naar het block kijkt. En niet in een van de hoeken zit.

Meltable ice block

De meltable block. Dit block zou door de speler gesmolten kunnen worden of door een straal van licht. Op het block zit er script dat checked of de speler in de buurt is en dat hij de interact button indrukt (E). Als dit waar was checkte ik of hij een torch vast heb en zodra alles goed was ging het block smelten.

Light system

Als een extra mechanics in onze game hadden wij voor sprint 2 besloten een light system te maken. Door het ijs dat in sommige stenen vast zit wordt het licht weerkaats en kan zo ook ijs blokken smelten. Voor dit systeem waren er 2 soorten blokken een light emitter en een light receiver. De light emitter block is de source van het licht in de map de light receiver weerkaats het licht een andere kant op. Om dit systeem makkelijker te maken heb ik een editor script gemaakt voor de light receiver waar je selecteerd aan welke kant hij licht kan ontvangen/versturen. dit door booleans te veranderen en daarna op de SpawnBeams button te drukken. Wanneer je door de editor scripts alles heb ingesteld kan je op play drukken en het systeem werkt automatisch. Elke keer dat er een MapUpdate wordt uitgevoegd ( block bewegen of smelten ). worden de raycast gemaakt om te kijken of er iets moet veranderen in het licht.

Level save/load

Om te zorgen dat de speler niet elke keer dat hij de game opstart opnieuw hoeft te beginnen hebben wij een save/load system gemaakt. Dit systeem zet een boolean op true wanneer je een level complete. Dit kon dan later weer door de LevelSelectorRenderer opgevraagd worden. Voor het save van de data heb ik gebruik gemaakt van de unity's build in PlayerPrefs.

Menu's

Alle menu's in de game zijn door mij functioneel gemaakt naast de sound player. Voor de buttons heb ik een UIEvents class gemaakt die events afvuurt voor MouseEnter, MouseExit en MouseClick. Het system maakt gebruik van unity's IPointerEnterHandler en IPointerExitHandler. Dit systeem werkte prima tot we een pause menu maakte. Omdat voor de pause menu we de TimeScale op 0 zetten werden de Pointerevents niet meer uitgevoerd. Hierdoor is een tweede class gemaakt die inplaats de PointerClasses raycasts gebruikt. Dit omdat de Update methode nog wel wordt uitgevoerd wanneer de TimeFrame op 0 staat.

Dialog system

In de game hebben we tutorials in de form van een voice over. Maar omdat we niet kunnen verwachten dat iedereen met geluid speelt heb ik ook een dialog systeem gemaakt. Dit systeem werkt met een array van messages en hoelang ze moeten worden gedisplayed. Dit systeem is daarna in de levels gebruikt als tutorial maar ook voor de intro en outro als dialog.

Git manager

Tijdens dit project moesten we met artists werken die nog niet veel ervaring hadden met unity en git. Daarom heb ik een git workflow document gemaakt. En hebben wij ook nog is uitgelegd hoe github desktop werkt. Om te zorgen dat er niet naar main/develop gepushed werd heb ik in github rules aangezet die zorgde dat er niet gepushed kon worden naar main/develop. Om te zorgen dat er alleen maar werkende mechanics in develop/main zou komen. Ook kwam dit vanpas omdat de artist een paar keer changes maakte maar niet controllerde of de prefabs nog wel werkte. Dit kon ik dan checked zodat hij opgelost kon worden voordat het in de develop branch zou komen