Como implementar um ciclo dia-noite em Godot

Um ciclo dia-noite pode adicionar um elemento envolvente aos seus jogos, adicionar variedade aos visuais e criar mecânicas interessantes. Jogos como Minecraft, Animal Crossing e Don’t Starve usam essa técnica de maneira eficaz, e você pode considerar adicioná-la aos seus próprios jogos, especialmente aqueles com um elemento em tempo real.

Felizmente, em Godot 4, alcançar um ciclo dia-noite é mais fácil do que nunca.

Configurando o jogo Godot

Antes de mergulhar na implementação do ciclo dia-noite, estabeleça a base para o seu jogo. Comece criando um novo projeto 2D no Godot 4. Configure seu projeto com as configurações de projeto necessárias.

O código usado neste artigo está disponível neste Repositório GitHub e é gratuito para você usar sob a licença do MIT.

Agora, crie um personagem de jogador. Na sua cena, adicione um CharacterBody2D. Dentro dele, adicione um CollisionShape2D com formato retangular e um Sprite2D. Isso representará seu personagem visualmente.

Para permitir que o jogador se mova, você pode usar o seguinte código GDScript. Anexe este script ao nó do seu personagem:

 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)

Este código permitirá ao jogador mover-se para a esquerda, direita, para cima e para baixo usando as teclas de seta. Você também pode adicionar alguns inimigos para o seu jogador se esquivar. Use nós StaticBody2D para esses inimigos e ajuste suas formas e posições de acordo.

  O que significa inativo no Roblox?

Adicione um cronômetro para o ciclo diurno e noturno

Para criar um ciclo dia-noite, você precisa de um cronômetro que funcione continuamente, alternando entre as fases diurna e noturna. Este cronômetro será responsável por monitorar a passagem do tempo no seu jogo.

Adicione um nó Timer à sua cena Godot. Você pode fazer isso clicando com o botão direito no painel Cena, escolhendo Adicionar nó e pesquisando por Temporizador na biblioteca de nós.

Renomeie o nó Timer para algo significativo como DayNightTimer para maior clareza. Configure as propriedades do nó Timer no painel Inspetor. Especificamente, defina a propriedade Wait Time como 0 (este é o atraso inicial antes do início do cronômetro) e verifique a propriedade One Shot para que o cronômetro se repita.

Agora, adicione um código GDScript que gerencie o ciclo dia-noite:

 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

        

Na função _ready, inicie o DayNightTimer quando a cena for carregada para iniciar o ciclo dia-noite. A função _on_DayNightTimer_timeout será executada sempre que o cronômetro chegar a zero, que é quando é hora de fazer a transição entre o dia e a noite.

Seguindo essas etapas, você terá um cronômetro diurno e noturno funcional que transita entre o dia e a noite, permitindo adicionar elementos de jogo dinâmicos e alterações visuais ao seu jogo Godot com base na hora do dia.

  – 10 melhores aplicativos de edição de bobinas para fazer seu próximo vídeo viral –

Adaptando o plano de fundo para o dia e a noite

Para complementar seu ciclo dia-noite, você precisa de uma forma de representar visualmente as transições entre o dia e a noite. Você pode usar um nó ColorRect integrado para criar um plano de fundo adequado para o dia e para a noite. Essa abordagem permite transições mais suaves e maior controle sobre o visual.

Na sua cena Godot, adicione um nó ColorRect. Este nó servirá como plano de fundo que muda de cor para representar o dia e a noite. Renomeie o nó ColorRect para algo significativo como BackgroundRect. Posicione-a como camada de fundo, garantindo que ela cubra toda a viewport.

No painel Inspetor, defina a propriedade Color com a cor de fundo inicial, que deve representar o dia. Por exemplo, você pode usar Color(0.5, 0.5, 0.8) para um céu azul claro durante o dia.

Agora, atualize seu código GDScript para funcionar com o nó ColorRect:

 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)

Atualize a cor do nó BackgroundRect para refletir a hora do dia. Por exemplo, defina-o para preto ao fazer a transição para a noite, criando um fundo escuro. Ao fazer a transição para o dia, defina-o para azul claro.

Efeitos Sonoros para o Ciclo Dia-Noite

Os efeitos sonoros podem desempenhar um papel crucial no aumento da imersão e do realismo do seu ciclo diurno e noturno em Godot. Eles fornecem pistas auditivas aos jogadores, tornando a transição entre o dia e a noite mais cativante. Você pode facilmente adicionar efeitos sonoros ao seu jogo Godot.

  API de busca JavaScript explicada

Antes de começar, certifique-se de ter recursos de áudio (arquivos de som) que representem sons diurnos e noturnos. Por exemplo, você pode ouvir sons de pássaros cantando durante o dia e grilos ou pios de coruja durante a noite.

Na sua cena Godot, adicione dois nós AudioStreamPlayer2D e nomeie-os apropriadamente. Você pode nomeá-los como $DaytimeSounds e $NighttimeSounds.

Agora, atualize o código GDScript para gerenciar as transições sonoras entre o dia e a noite:

 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()

Quando o cronômetro diurno e noturno expira, esse código verifica para qual fase ele deve fazer a transição e reproduz os sons apropriados para corresponder.

Sinta-se à vontade para personalizar seus efeitos sonoros sem direitos autorais para combinar com o tema e a atmosfera do seu jogo. Você também pode sobrepor várias trilhas de áudio ou usar efeitos de áudio (reverberação, eco, etc.) para criar uma experiência auditiva mais rica.

Torne seus jogos Godot mais envolventes com um ciclo diurno e noturno

Implementar um ciclo dia-noite em seu jogo Godot pode aumentar significativamente a imersão e o envolvimento do jogador. Ele adiciona profundidade ao mundo do jogo, introduz elementos de jogo dinâmicos e permite uma narrativa criativa.

Lembre-se de adaptar o ciclo dia-noite ao tema e à mecânica exclusivos do seu jogo e não hesite em experimentar diferentes efeitos visuais e de jogo para criar uma experiência de jogo verdadeiramente cativante.