Hur man implementerar en dag-natt-cykel i Godot

En dag-natt-cykel kan lägga till ett uppslukande element till dina spel, lägga till variation till bilder och skapa intressant mekanik. Spel som Minecraft, Animal Crossing och Don’t Starve använder den här tekniken effektivt, och det är en som du kan överväga att lägga till i dina egna spel, särskilt de med ett realtidselement.

Lyckligtvis, i Godot 4, är det lättare än någonsin att uppnå en dag-natt-cykel.

Konfigurera Godot-spelet

Innan du dyker in i implementeringen av dag-natt-cykeln, sätt upp grunden för ditt spel. Börja med att skapa ett nytt 2D-projekt i Godot 4. Konfigurera ditt projekt med de nödvändiga projektinställningarna.

Koden som används i den här artikeln är tillgänglig i denna GitHub-förråd och är gratis för dig att använda under MIT-licensen.

Skapa nu en spelarkaraktär. Lägg till en CharacterBody2D i din scen. Inuti den, lägg till en CollisionShape2D med en rektangelform och en Sprite2D. Detta kommer att representera din karaktär visuellt.

För att låta spelaren röra sig kan du använda följande GDScript-kod. Bifoga detta skript till din karaktärsnod:

 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)

Denna kod gör att spelaren kan flytta vänster, höger, upp och ner med hjälp av piltangenterna. Du kan också lägga till några fiender för din spelare att undvika. Använd StaticBody2D-noder för dessa fiender och justera deras former och positioner därefter.

Lägg till en timer för dag- och nattcykeln

För att skapa en dag-natt-cykel behöver du en timer som går kontinuerligt och växlar mellan dag- och nattfaser. Denna timer kommer att vara ansvarig för att spåra tidens gång i ditt spel.

Lägg till en timernod till din Godot-scen. Du kan göra detta genom att högerklicka i scenpanelen, välja Lägg till nod och sedan söka efter Timer i nodbiblioteket.

Byt namn på Timer-noden till något meningsfullt som DayNightTimer för tydlighetens skull. Konfigurera timernodens egenskaper i panelen Inspektör. Specifikt, ställ in egenskapen Wait Time till 0 (detta är den första fördröjningen innan timern startar) och kontrollera One Shot-egenskapen så att timern upprepas.

Lägg nu till en GDScript-kod som hanterar dag-natt-cykeln:

 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 _ready-funktionen, starta DayNightTimer när scenen laddas för att kickstarta dag-natt-cykeln. Funktionen _on_DayNightTimer_timeout kommer att köras varje gång timern når noll, vilket är då det är dags att växla mellan dag och natt.

Genom att följa dessa steg kommer du att ha en funktionell dag-natt-timer som växlar mellan dag och natt, så att du kan lägga till dynamiska spelelement och visuella förändringar i ditt Godot-spel baserat på tiden på dygnet.

Anpassa bakgrunden för dag och natt

För att komplettera din dag-natt-cykel behöver du ett sätt att visuellt representera övergångarna mellan dag och natt. Du kan använda en inbyggd ColorRect-nod för att skapa en lämplig bakgrund för både dag och natt. Detta tillvägagångssätt möjliggör mjukare övergångar och större kontroll över det visuella.

Lägg till en ColorRect-nod i din Godot-scen. Denna nod kommer att fungera som din bakgrund som ändrar färg för att representera dag och natt. Byt namn på ColorRect-noden till något meningsfullt som BackgroundRect. Placera den som bakgrundslager och se till att den täcker hela visningsporten.

På panelen Inspektör ställer du in egenskapen Färg till din ursprungliga bakgrundsfärg, som ska representera dagtid. Du kan till exempel använda Color(0.5, 0.5, 0.8) för en ljusblå daghimmel.

Uppdatera nu din GDScript-kod så att den fungerar 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)

Uppdatera färgen på BackgroundRect-noden för att återspegla tiden på dygnet. Ställ till exempel in den på svart när du går över till natten, vilket skapar en mörk bakgrund. När du går över till dag, ställ in den på ljusblått.

Ljudeffekter för dag-natt-cykeln

Ljudeffekter kan spela en avgörande roll för att förbättra fördjupningen och realismen i din dag-natt-cykel i Godot. De ger spelare hörselsignaler, vilket gör övergången mellan dag och natt mer fängslande. Du kan enkelt lägga till ljudeffekter i ditt Godot-spel.

Innan du börjar, se till att du har ljudresurser (ljudfiler) som representerar dag- och nattljud. Du kan till exempel ha fågelkvitter för dagen och syrsor eller ugglor för natten.

Lägg till två AudioStreamPlayer2D-noder i din Godot-scen och namnge dem på rätt sätt. Du kan namnge dem något som $DaytimeSounds och $NighttimeSounds.

Uppdatera nu GDScript-koden för att hantera ljudövergångarna mellan dag och 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 dag-natt-timern tar slut, kontrollerar den här koden för att se vilken fas den ska övergå till och spelar lämpliga ljud för att matcha.

Skräddarsy gärna dina upphovsrättsfria ljudeffekter för att matcha temat och atmosfären i ditt spel. Du kan också lagra flera ljudspår eller använda ljudeffekter (reverb, eko, etc.) för att skapa en rikare ljudupplevelse.

Gör dina Godot-spel mer engagerande med en dag-natt-cykel

Att implementera en dag-natt-cykel i ditt Godot-spel kan avsevärt förbättra spelarens fördjupning och engagemang. Det ger djup till din spelvärld, introducerar dynamiska spelelement och möjliggör kreativt berättande.

Kom ihåg att skräddarsy dag-natt-cykeln efter ditt spels unika tema och mekanik, och tveka inte att experimentera med olika visuella effekter och speleffekter för att skapa en verkligt fängslande spelupplevelse.