Feature Showcases - rzfvansuijdam/Project_Kaiju GitHub Wiki

[WaypointManager: Bjorn]

Summary

Dit is voornaamelijk een script dat helpte met de workflow van een Waypoint gebaseerd level, en als een toegang tot de Waypoints via een Singleton. Hier introduceer ik wat van de helper functions die ik in editor uit kon voeren via custom buttons.

PathGizmo

Via de OnDrawGizmos function had ik een manier om mijn Bezier Curves visueel te representeren in de editor. Dit maakte het extreem makkelijk om levels te editten en te fine tunen omdat het mij de exacte locaties geeft waar de Rail Follower naar toe zal gaan.

image

GetWaypoint

Een simpel Getter function die, via overload, dynamic wordt gemaakt!

image

SpawnWaypoint

Via een editor button met een enum drop-down kan je een Waypoint naar keuzen kiezen. Zet de Waypoint op in de List, met een parent, en als de destinatie van de vorige waypoint in de lijst via SetWaypointPaths.

image


[Bezier Path: Bjorn]

UpdatePath

UpdatePath zet de posities van start, eind, en de amplifier geeft aan hoe sterk de curve moet zijn. De hoger de amplifier, de verder de curve handles van de basis punten worden geduwd. Dit is nodig als je waypoints op lange afstanden staan.

image

ReturnCalculatedPosition

Een Bezier curve is een wiskundig gegenereerd curve die punt A en B verbindt met een smooth curve inplaats van een static lijn. Deze curve is door de formule hieronder gegenereerd!

image


[RailMovement: Bjorn]

Update Waypoint

Een async functie die der voor zorgt dat niet alleen de waypoint wordt geupdate, maar dat de RailMovement ook instructies uitvoert specefiek van wat voor waypoint hij bij aankomt. Hiervoor gebruik ik inheritance en locale switch case variabelen om te specefieke functies te berijken die anders out of scope zijn. Deze is Async zodat ik Tasks kan gebruiken, en kan wachten tot die worden afgerond zoals bij de waitpoints.

image

Update (Position)

In mijn Update functie heb ik nesting zo veel mogelijk geprobeerd te voorkomen, dus begin met een return statement als _continue false is. Daarna doe ik een paar checks om te zorgen dat ik geen null references krijg, of dat het schip buiten de scope van de waypoint gaat met _currentProgress. Door de afstand te calculeren tussen Bezier steps kan ik de speed daar door delen, zodat de snelheid gelijk is vrij van de afstand (niet-functioneel) Uiteindelijk check ik of ik een nieuwe waypoint kan updaten.

image


[EnemyWave: Jaimy]

SpawnFirstWave

Dit is een simpele functie die gecalled can worden via een andere script om de wave systeem te activeren en de eerste wave te spawnen

SpawnWave

Deze couroutine is verantwoordelijk voor het inspawnen van de enemy prefabs. Hij zet eerst de Wave Active en telt dan de aantal enemies die de dev van te voren heeft aangegeven in de unity inspector. ( Hij reset ook de spawns voor als het niet de eerste wave is )

Vervolgens gaat ie i.m.v. een for loop iedere enemy inspawnen op een tijd interval die de dev zelf kan instellen via de inspector. Ook voegt ie een Listener toe voor de OnDeath event van de enemy voor de volgende functie.

HandleEnemyDeath

Via deze functie kan de script detecteren of een enemy neer gehaald is en kan de script de enemy count omlaag zetten

Zodra de enemycount 0 is zet ie de wave op inactive en gaat ie naar de volgende wave index. en als de currentwave index lager is dan het aantal waves in de wave manager object gaat ie de nieuwe wave starten en speelt ie weer de SpawnWave coroutine weer af. maar het de laatste wave is dan invoket hij de onLastWaveCompleted event die weer makkelijk door een andere script gebruikt kan worden.

[MonsterTotalHealth: Jaimy]

Start

Deze script was gemaakt om een health systeem te maken voor de Enemy door zijn hoofd en tentakels samen toe te voegen aan een totale health bar.

Hij pakt eerst alle componenten met de tag "Enemy" en voegt ze samen in een globale health bar. vervolgens voegt ie nog 600 health toe en zet hij de totale health als de health voor het monster's hoofd in de EnemyHealth.cs script van dat game object. Ook voegt ie een event listener toe voor de hoofd en tentakels. met deze events kunnen we de volgende functie callen

TakeTotalDamage

Door middel van deze functie kunnen we de totale health value omlaag brengen. dit had ik gedaan met de hulp van events. Op de Enemyhealth.cs script had ik een kleine aanpassing gemaakt zodat ie de Damage value mee kan nemen in de event en die wordt vervolgens hier gebruikt.

Zodra de totalCurrentHealth 0 is called hij de EnemyDeath functie in alle Enemy objecten en heb je het monster verslagen


[ShipMovement: Jaimy] (Unused)

Input

Omdat deze script physics gebruik had ik de alle inputs booleans laten toggelen zodat het minder zwaar zou zijn om het input te lezen in de FixedUpdate

Het enige andere is dat bij OnAccelerate de fovOnAccelerate script nog gecalled wordt en die script verhoogd de fov van de speler om de illusie van snelheid de simuleren

(Dit is de functie die die aanroept. het gebruikt Lerp om de fov te verhoogen)

FixedUpdate

In de fixed update worden alle physics gehandeld. Een van die dingen is de steering. Dit doet ie door middel van force applyen op een pivot point. maar op de tegengestelde richting zodat de achterkant van de boot wijst naar de richting waar de speler naar toe wilt gaan.

Ook wordt er drag geapplyed als om te remmen.

ApplyForceToReachVelocity

Hij zet eerst de velocity door te huidige snelheid van de speler te pakken. daarna Clampt hij de force zodat de zodat hij de max velocity niet overschreid

Daarna voegt ie force to aan de speler om em naar voren te duwen. en zal die force applyen totdat ie de maximale velocity berijkt. en dan zal hij niet meer acceleren maar op de zelfde snelheid naar voren gaan