Project Info

Dit was een groepsproject voor school dat samen met de artist in 7 weken is gemaakt. Dit project ging helaas niet al te soepel en er waren wat tegenslagen maar uiteindelijk hebben we er toch iets vets van weten te maken.

Tijdens dit project heb ik gewerkt aan.

  • Camera Movement
  • KeyCard / Deuren
  • Level Select
  • WallTurret
  • GameSaving-
  • WallCamera
  • GameManager
  • Enemies
  • Boss
  • CameraMovement

    Sommige gedeeltes in de map waren niet goed te zien door de camera positie. Ik had al een camera die de speler volgt en dat script heb ik aangepast zodat de camera ook 180 graden kan draaien zodat je meer van de map kunt zien en beter kunt rondbewegen. De positie van de camera wordt ook een klein beetje aangepast zodat de speler altijd goed in beeld staat omdat de speler niet helemaal in het midden van het beeld zit. De camera wordt gedraaid met een Lerp en een simpele timer.

    KeyCard / Deuren

    KeyCard / klap Deuren

    De keycarddeur gaat alleen open als er een bool true is. Deze bool kan in de inspector op true worden gezet zodat de deur altijd open kan zijn of met een keycard geopend moet worden. De kleur van de deuren werd eerst veranderd naar de kleur van de keycards maar dat wordt niet gebruikt in de laatste versie van de game. De deuren houden met een enum de staat bij of de deur open/dicht aan het gaan is. De keycarddeuren werken met waypoints waarbij de deuren naar de waypoints gaan en de klapdeuren roteren van de ene rotatie naar de andere.

    KeyCards

    De deuren hebben allemaal een bool die aangeeft of de speler de bijbehorende keycards heeft. Als er een keycard wordt opgepakt worden de bools op true gezet voor alle deuren die de keycard in de inspector hebben staan. Op de UI bevindt zich een grid waar keycards op gespawnd worden wanneer er een keycard wordt opgepakt. De kleur van de UI keycard wordt omgezet naar de kleur van de opgepakte keycard.

    LevelSelect

    Niet alle levels zijn altijd speelbaar dus schakelen de levelselectknoppen zichzelf uit als ze zien dat de speler nog niet bij dat level is aangekomen. De knoppen kijken in het DataCenter van de game om te zien bij welk level de speler is. Als de knop actief is kan een level worden gestart met de leveltag in de knop die gemakkelijk naar elk level kan worden veranderd zodat de knoppen makkelijk instelbaar zijn voor komende levels die nog in ontwikkeling zijn.

    WallTurret

    De WallTurret kijkt of de speler binnen bereik is met een OverlapSphere en een angle(VisonCone). Met een raycast wordt er gekeken of er geen muur tussen staat en dan begint de WallTurret op de speler te schieten. Met RotateTowards draait de turret naar de speler. Voor wat visuele feedback heeft de turret een licht die het schietveld aangeeft. Als de speler in het zicht van de turret is verandert de kleur van het licht naar rood.

    GameSaving

    De game slaat alles wat opgeslagen moet worden op in lijsten in een aparte class die met een BinaryFormatter wordt omgezet tot een save file. De stats waar de speler mee eindigt worden naar het volgende level overgezet zodat de speler verder kan gaan met dezelfde stats. Als de speler een vorig level wil spelen kan de speler met de oude stats verder omdat alles per level word opgeslagen.

    Camera's

    De camera's kijken of de speler ergens rondloopt door middel van een OverlapSphere en angle (vision cone). een raycast controleert of er geen obstakel tussen staat. Het gezichtsveld (FOV) van de camera wordt aangegeven met licht dat rood wordt als de speler erin loopt. De camera geeft aan alle vijanden die in de buurt staan aan dat de speler in de buurt is zodat ze gaan aanvallen. De camera heeft de mogelijkheid om rond te draaien en dit is aan te passen in de inspector.

    GameManager

    De GameManager wordt gebruikt om het death screen in te laden en automatisch het level te herstarten als de speler doodgaat. Zodra de bossfight is geladen wordt de GameManager overschreven en doet deze niets meer.

    Enemies

    Ik wilde enemies hebben die gemakkelijk aan te passen zijn dus deze enemies hebben ook best wel wat instellingen. Zo kunnen de zichtafstand, zichtangle en de manier van bewegen worden aangepast. De enemies kunnen waypoints volgen. dezelfde waypoints kunnen ze ook in een random volgorde volgen. en de enemies kunnen zelf rondlopen met random movement.

    Ik heb de vision cone van de enemies gemaakt met een OverlapSphere, angle en een raycast die kijkt of er geen obstakels in de weg staan. De AI heeft meerdere states om aan te vallen rond te lopen of achter de speler aan te gaan. Afhankelijk van of er ergens een obstakel staat of de speler te ver van de enemy is worden die states aangepast.

    De enemies hebben de mogelijkheid om andere enemies binnen een bepaalde range en zonder obstakels in de weg te alarmeren. Daarnaast kunnen de enemies alert worden door camera's die met een OverlapSphere alle in range enemies detecteren. Als de speler in de buurt is worden die enemies alert en krijgen ze de positie van de speler.

    BossFight

    Boss

    De tijd begon een beetje krap te worden dus de boss is helaas een beetje gehaast. De boss heeft meerdere aanvallen die willekeurig worden uitgevoerd zoals de normale aanval die ongeveer één kogel per seconde schiet, een burstaanval en er was het plan voor granaten maar dat is nu ook een normale aanval geworden omdat er helaas te weinig tijd was. De boss past zijn positie aan gebaseerd op of de speler ver weg of dichtbij is. Ook als de boss te vaak wordt geraakt gaat hij op zoek naar een andere positie. De boss heeft een OverlapSphere en een angle vision cone.

    BossBattleManager

    De BossBattleManager houdt de hele bossfight bij. Als de speler doodgaat wordt alles in de boss area hersteld naar de oorspronkelijke staat. Nieuwe enemies worden ingespawnd en ook de spelerstats worden teruggezet. De BossBattleManager regelt ook het in- en uitfaden van het beeld zolang de bossfight bezig is. Als alle enemies en de boss dood zijn is de bossfight klaar en wordt de game automatisch opgeslagen en het startscherm ingeladen.