8. UI & Score
Voeg een UI en score systeem toe aan je arcade racer
Overzicht
Voeg een simpel scoresysteem toe aan je arcade racer:
UI autoload - Globale UI met score tracking
Score label - Label dat de score toont
Checkpoint group - Automatische connectie via Godot groups
Checkpoint group

Begin met het toevoegen van de Area3D van elk checkpoint aan een "checkpoint" group. Godot groups laten je nodes organiseren met labels. Je kan dan alle nodes in een group opvragen met GetTree().GetNodesInGroup("checkpoint"). Perfect voor collectibles, enemies, of checkpoints!
Open scenes/Checkpoint.tscn (of waar je je checkpoint scene hebt opgeslagen)
Selecteer de Area3D child node (niet de root!)
Ga naar de Node tab rechts (naast Inspector)
Onder Groups, zie je een tekstveld en een + knop
Typ in het tekstveld: checkpoint
Vink Global AAN. Deze instelling zorgt ervoor dat we ook in andere scenes van deze groep gebruik kunnen maken.
Klik de + knop
Je ziet nu "checkpoint" in de lijst onder Groups
Sla de scene op (Ctrl+S)
Nu zitten alle Area3D nodes van de checkpoints automatisch in de "checkpoint" group!
Ui scene
Maak een simpele UI-scene die de score toont.
Klik Scene > New Scene
Klik User Interface (dit maakt een Control node als root)
De root node heet "Control" - hernoem deze naar UI
Rechts-klik op UI > Add Child Node > Label
Hernoem de Label naar ScoreLabel
Sla de scene op als res://scenes/ui.tscn
Scene hierarchy:
Positioneer en style de scorelabel

Plaats het Score Label recehtsboven in de UI.
Selecteer de ScoreLabel node
In de Inspector, onder Control > Layout Mode:
Zet de waarde op Anchors
Klik het Anchors Preset dropdown menu en selecteer Top Right
Onder Label > Text: Typ Score: 0
Klik op Control > Theme Overrides > Font Sizes
Klik het + icoontje naast Font Size
Zet de waarde op 32
Sla de scene op
Ui script
Maak nu een script dat zowel de UI toont als de score bijhoudt.
Selecteer de UI node in scenes/ui.tscn
Klik het script icoontje in de Inspector (of rechts-klik > Attach Script)
Path zou moeten zijn: res://scripts/UI.cs
Klik Create
Start met de basis class:
Voeg een variabele toe om de ScoreLabel op te halen:
Voeg een score variabele toe:
Voeg de AddPoint method toe die de score verhoogt:
Update de label tekst in de AddPoint method:
Ga terug naar de Godot Editor en selecteer de UI node in scenes/ui.tscn
Sleep de ScoreLabel node naar de Score Label property in de Inspector
Vergeet zeker deze laatste 2 stappen niet! Anders krijg je een null reference error.
Checkpoint connecties
Vervolgens zorg je ervoor dat alle checkpoints aan de UI laten weten wanneer de speler er doorheen vliegt. Verzamel hiervoor eerst alle checkpoints, en verbind daarna het BodyEntered-signaal van elke checkpoint met de AddPoint-methode.
Voeg de
_Ready()method toe:
Vind alle checkpoints in de "checkpoint" group:
GetTree().GetNodesInGroup("checkpoint") geeft een lijst met alle nodes die in de "checkpoint" group zitten.
Loop door alle gevonden checkpoints:
Check of elke node een Area3D is:
Met node is Area3D checkpoint controleer je het type EN sla je het meteen op in een nieuwe variabele checkpoint.
Verbind het BodyEntered signaal met AddPoint:
Waarom de lambda? Het BodyEntered signaal geeft een Node3D parameter mee, maar AddPoint() verwacht geen parameters. De lambda functie body => AddPoint() ontvangt de parameter maar gebruikt deze niet - het roept gewoon AddPoint() aan.
UI als Autoload

Nu maken we de UI beschikbaar in het hele project via Godot's autoload-systeem.
Ga naar Project > Project Settings
Klik op het Globals tabblad
Selecteer Autoload
Klik op het folder icoontje naast Path
Navigeer naar res://scenes/ui.tscn
Selecteer het bestand
Het Node Name veld vult automatisch in met "UI"
Klik Add
Klik Close
Nu is de UI automatisch zichtbaar in elke scene EN verbindt automatisch met alle checkpoints!
Test met F5!
Je zou nu moeten zien:
"Score: 0" rechtsboven in de UI
Wanneer je door een checkpoint vliegt:
Het checkpoint geluid speelt
De score gaat omhoog (1, 2, 3, ...)
De UI update meteen
Alle checkpoints werken automatisch zonder handmatige signal connecties!
Als het niet werkt:
Controleer of UI.tscn is toegevoegd als autoload in Project Settings
Check of de checkpoint scene in de "checkpoint" group zit
Kijk in de Output tab of er errors zijn
Test of de checkpoint collision werkt (voeg tijdelijk
GD.Print("Hit!")toe in OnCheckpointEntered)
Complete script
Laatst bijgewerkt