Audio Effects
Voeg geluid toe aan je platformer met AudioStreamPlayer3D
Overzicht
Voeg verschillende geluiden toe aan je platformer:
Jump sound - Geluid wanneer de player springt
Land sound - Geluid wanneer de player landt
Coin pickup sound - Geluid bij het verzamelen van munten
Block break sound - Geluid wanneer breakable blocks breken
Player Jump Sound
Begin met een geluid wanneer de player springt.
Open objects/Player.tscn
Selecteer de Player root node
Rechts-klik > Add Child Node > AudioStreamPlayer3D
Hernoem deze node naar JumpSound
Sla de scene op
Scene hierarchy:
Player (CharacterBody3D)
βββ Capsule (imported scene)
βββ CollisionShape3D (CapsuleShape3D)
βββ AnimationPlayer
βββ ParticlesTrail (GPUParticles3D)
βββ JumpSound (AudioStreamPlayer3D)Jump Sound Instellen
Selecteer de JumpSound node
In de Inspector, vind Stream
Klik op het dropdown > Load
Navigeer naar res://audio/jump.wav (of je eigen jump sound file)
Selecteer het audio bestand en klik Open
Zet Autoplay op UIT
Expand Stream en zorg dat Loop UIT staat
3D Audio Settings
Selecteer de JumpSound node
In de Inspector, onder Attenuation:
Unit Size: 8.0 (geluid blijft op vol volume tot 8 meter)
Max Distance: 40.0 (geluid is onhoorbaar na 40 meter)
Onder Attenuation, vind Model
Klik het dropdown en selecteer Inverse Square
Jump Sound Triggeren via Script
Open scripts/Player.cs
Voeg een referentie toe voor de audio player.
Haal de jump sound node op in
_Ready():
Nu speel je het geluid af wanneer de player springt. Dit gebeurt in
_PhysicsProcess()waar we de jump input checken:
Uitleg: We gebruiken IsActionJustPressed() om te detecteren wanneer de speler de jump knop indrukt. Op dat moment spelen we het jump sound af. Het geluid speelt alleen wanneer de player op de grond is (IsOnFloor()), dus niet tijdens dubbele sprongen.
Player Land Sound
Voeg nu een geluid toe wanneer de player landt na een sprong.
Open objects/Player.tscn
Selecteer de Player root node
Rechts-klik > Add Child Node > AudioStreamPlayer3D
Hernoem deze node naar LandSound
Sla de scene op
Scene hierarchy:
Land Sound Instellen
Selecteer de LandSound node
In de Inspector, vind Stream
Klik op het dropdown > Load
Navigeer naar res://audio/land.wav
Selecteer het bestand en klik Open
Zet Autoplay op UIT
Expand Stream en zorg dat Loop UIT staat
Onder Attenuation, stel dezelfde waarden in als JumpSound:
Unit Size: 8.0
Max Distance: 40.0
Model: Inverse Square
Land Sound Script
Om te detecteren wanneer de player landt, moet je bijhouden of de player in de vorige frame in de lucht was.
Open scripts/Player.cs
Voeg een referentie toe voor de land sound en een variabele om bij te houden of we in de lucht waren:
Haal de land sound node op in
_Ready():
Nu detecteren we landing aan het einde van
_PhysicsProcess():
Uitleg: We gebruiken _wasInAir om bij te houden of de player in de vorige frame in de lucht was. Als de player NU op de grond is (IsOnFloor()) maar in de vorige frame in de lucht WAS (_wasInAir), dan is de player net geland en spelen we het land sound af.
Test Jump en Land Sounds
Test met F5!
Je zou nu moeten horen:
Wanneer je springt (spatiebalk), speelt een jump geluid
Wanneer je landt na een sprong, speelt een land geluid
Het land geluid speelt NIET wanneer je van een platform afloopt zonder te springen
Als geluiden niet werken:
Check of Autoplay UIT staat bij beide sounds
Controleer of de audio bestanden correct zijn ingeladen
Zorg dat beide nodes correct worden opgehaald in
_Ready()Check of
Play()wordt aangeroepen op de juiste momenten
Coin Pickup Sound
Voeg nu een geluid toe wanneer de player een munt verzamelt.
Open objects/Coin.tscn
Selecteer de Coin root node (Area3D)
Rechts-klik > Add Child Node > AudioStreamPlayer3D
Hernoem deze node naar PickupSound
Sla de scene op
Scene hierarchy:
Coin Sound Instellen
Selecteer de PickupSound node
In de Inspector, vind Stream
Klik op het dropdown > Load
Navigeer naar res://audio/coin_pickup.wav
Selecteer het bestand en klik Open
Zet Autoplay op UIT
Expand Stream en zorg dat Loop UIT staat
Onder Attenuation:
Unit Size: 5.0 (kleinere range voor pickup sounds)
Max Distance: 30.0
Model: Inverse Square
Coin Sound Script
Je moet het geluid afspelen wanneer de coin wordt verzameld, maar de coin pas verwijderen NADAT het geluid klaar is.
Open scripts/Coin.cs
Voeg een referentie toe voor de audio player:
Haal de pickup sound node op in
_Ready():
Speel nu het geluid af wanneer de coin wordt verzameld:
Er is een probleem:
QueueFree()verwijdert de coin meteen, maar dan kan het geluid niet meer afspelen! Je moet wachten tot het geluid klaar is. Je subscribet op hetFinishedsignal:
Uitleg: Verberg de coin meteen met Visible = false en schakel collision uit, maar verwijder de node pas wanneer het pickup sound klaar is. De speler ziet de coin verdwijnen en hoort het geluid volledig.
Block Break Sound
Als laatste voeg je een geluid toe wanneer breakable blocks breken.
Open objects/BreakableBlock.tscn
Selecteer de BreakableBlock root node
Rechts-klik > Add Child Node > AudioStreamPlayer3D
Hernoem deze node naar BreakSound
Sla de scene op
Break Sound Instellen
Selecteer de BreakSound node
In de Inspector, vind Stream
Klik op het dropdown > Load
Navigeer naar res://audio/block_break.wav
Selecteer het bestand en klik Open
Zet Autoplay op UIT
Expand Stream en zorg dat Loop UIT staat
Onder Attenuation:
Unit Size: 7.0
Max Distance: 35.0
Model: Inverse Square
Break Sound Script
Open scripts/BreakableBlock.cs
Voeg een referentie toe voor de audio player:
Haal de break sound node op in
_Ready():
Nu spelen we het geluid af en wachten tot het klaar is:
Test alle Audio
Test met F5!
Je zou nu moeten horen:
Jump sound: Wanneer je springt (spatiebalk)
Land sound: Wanneer je landt na een sprong
Coin pickup sound: Wanneer je een munt verzamelt (3D spatialized)
Block break sound: Wanneer een breakable block breekt
Als geluiden niet werken:
Check of alle audio bestanden correct zijn ingeladen
Controleer of
Play()wordt aangeroepen op de juiste momentenZorg dat
Finishedsignals correct zijn geconnectCheck of nodes correct worden opgehaald in
_Ready()Controleer je computer volume instellingen
Zorg dat objects niet worden verwijderd voordat geluiden klaar zijn
Complete Scripts
Laatst bijgewerkt