Lag et fengslende Godot-spill: Guide til dag-natt-syklus

En døgnrytme kan tilføre et ekstra lag av innlevelse i spillene dine, med variasjon i det visuelle og interessante spillmekanikker som resultat. Spill som Minecraft, Animal Crossing og Don’t Starve har alle brukt denne metoden på en effektiv måte, og det er noe du bør vurdere å implementere i dine egne spill, spesielt de som har sanntidselementer.

Heldigvis har det i Godot 4 blitt enklere enn noensinne å lage en dynamisk døgnrytme.

Oppsett av Godot-spillet

Før du begynner å implementere selve døgnrytmen, er det viktig å etablere et solid fundament for spillet ditt. Start med å opprette et nytt 2D-prosjekt i Godot 4. Konfigurer prosjektet med de nødvendige innstillingene.

Koden som brukes i denne artikkelen er tilgjengelig på denne GitHub-repositoriet og kan brukes fritt under MIT-lisensen.

Lag deretter en spillerkarakter. Legg til en CharacterBody2D-node i scenen din. Inne i denne noden legger du til en CollisionShape2D med en rektangelform og en Sprite2D. Dette vil visuelt representere spillerkarakteren din.

For å gi spilleren mulighet til å bevege seg, kan du bruke følgende GDScript-kode. Fest dette skriptet til spillerkarakterens node:

 extends CharacterBody2D
var speed = 300

func _physics_process(delta):
	var input_dir = Vector2.ZERO

	if Input.is_action_pressed("ui_left"):
		input_dir.x -= 1
	if Input.is_action_pressed("ui_right"):
		input_dir.x += 1
	if Input.is_action_pressed("ui_up"):
		input_dir.y -= 1
	if Input.is_action_pressed("ui_down"):
		input_dir.y += 1

	velocity = input_dir.normalized() * speed
	move_and_collide(velocity * delta)
 

Denne koden lar spilleren bevege seg til venstre, høyre, opp og ned ved hjelp av piltastene. Du kan også legge til noen fiender som spilleren kan unngå. Bruk StaticBody2D-noder for disse fiendene og juster deres former og posisjoner deretter.

Legg til en tidsmåler for døgnrytmen

For å implementere en døgnrytme trenger du en tidsmåler som går kontinuerlig, og veksler mellom dag- og nattfaser. Denne tidsmåleren vil holde oversikt over tidens gang i spillet ditt.

Legg til en Timer-node i Godot-scenen din. Du kan gjøre dette ved å høyreklikke i Scene-panelet, velge «Add Node» og deretter søke etter «Timer» i nodebiblioteket.

Gi Timer-noden et beskrivende navn, som for eksempel «DayNightTimer», for å gjøre det enklere å forstå. Konfigurer Timer-nodens egenskaper i inspektørpanelet. Sett spesifikt «Wait Time»-egenskapen til 0 (dette er den første forsinkelsen før tidsmåleren starter) og slå av «One Shot»-egenskapen slik at tidsmåleren gjentar seg.

Legg nå til følgende GDScript-kode for å styre døgnrytmen:

 extends Node2D
var day_duration = 30
var night_duration = 30

var is_day = true

func _ready():
	$DayNightTimer.start()

func _on_DayNightTimer_timeout():
	if is_day:
		$DayNightTimer.start(day_duration)
		is_day = false
	else:
		$DayNightTimer.start(night_duration)
		is_day = true
 

I funksjonen _ready, startes DayNightTimer når scenen lastes inn for å sette i gang døgnrytmen. Funksjonen _on_DayNightTimer_timeout vil bli kalt hver gang tidsmåleren når null, som betyr at det er tid for å bytte mellom dag og natt.

Ved å følge disse trinnene vil du ha en tidsmåler som veksler mellom dag og natt, noe som gjør det mulig å legge til dynamiske spillelementer og visuelle endringer i Godot-spillet ditt, basert på tiden på døgnet.

Tilpassing av bakgrunnen for dag og natt

For å komplettere døgnrytmen din, trenger du en måte å visuelt representere overgangene mellom dag og natt. Du kan bruke en innebygd ColorRect-node for å lage en passende bakgrunn for både dag og natt. Denne tilnærmingen gir jevnere overganger og større kontroll over det visuelle.

Legg til en ColorRect-node i Godot-scenen. Denne noden skal fungere som bakgrunnen din og endre farge for å representere dag og natt. Gi ColorRect-noden et passende navn, som for eksempel «BackgroundRect». Plasser noden som et bakgrunnslag og sørg for at den dekker hele visningsområdet.

I inspektørpanelet setter du fargeegenskapen til den opprinnelige bakgrunnsfargen, som skal representere dagtid. Du kan for eksempel bruke Color(0.5, 0.5, 0.8) for en lyseblå daghimmel.

Oppdater nå GDScript-koden for å fungere med ColorRect-noden:

 func _on_day_night_timer_timeout():
	if is_day:
		$DayNightTimer.start(day_duration)
		is_day = false
		$BackgroundRect.color = Color(0.5, 0.5, 0.8)
	else:
		$DayNightTimer.start(night_duration)
		is_day = true
		$BackgroundRect.color = Color(0, 0, 0)
 

Oppdater fargen på BackgroundRect-noden for å gjenspeile tiden på døgnet. Sett den for eksempel til svart når det blir natt, for å skape en mørk bakgrunn. Når det blir dag, sett den tilbake til lyseblå.

Lydeffekter for døgnrytmen

Lydeffekter kan spille en viktig rolle i å øke innlevelsen og realismen i døgnrytmen din i Godot. De gir spillerne auditive signaler, som gjør overgangen mellom dag og natt mer fengslende. Du kan enkelt legge til lydeffekter i Godot-spillet ditt.

Før du begynner, sørg for at du har lydressurser (lydfiler) som representerer dag- og nattlyder. Du kan for eksempel ha fuglekvitter for dagen og sirisser eller ugletut for natten.

I Godot-scenen din legger du til to AudioStreamPlayer2D-noder og gir dem passende navn. Du kan for eksempel kalle dem $DaytimeSounds og $NighttimeSounds.

Oppdater nå GDScript-koden for å administrere lydovergangene mellom dag og natt:

 func _on_day_night_timer_timeout():
	if is_day:
		$DayNightTimer.start(day_duration)
		is_day = false
		$NighttimeSounds.stop()
		$DaytimeSounds.play()
	else:
		$DayNightTimer.start(night_duration)
		is_day = true
		$DaytimeSounds.stop()
		$NighttimeSounds.play()
 

Når tidsmåleren går ut, sjekker koden hvilken fase spillet skal gå over til og spiller av de riktige lydene.

Tilpass gjerne dine egne opphavsrettsfrie lydeffekter for å matche temaet og atmosfæren i spillet ditt. Du kan også legge flere lydspor i lag, eller bruke lydeffekter som (reverb, ekko osv.) for å skape en rikere lydopplevelse.

Gjør Godot-spillene dine mer engasjerende med en døgnrytme

Å implementere en døgnrytme i Godot-spillet ditt kan forbedre spillerens innlevelse og engasjement betraktelig. Det gir dybde til spillverdenen din, introduserer dynamiske spillelementer og gir muligheter for kreativ historiefortelling.

Husk å skreddersy døgnrytmen til spillets unike tema og mekanikker, og ikke vær redd for å eksperimentere med forskjellige visuelle effekter og spilleeffekter for å skape en virkelig fengslende spillopplevelse.