Ciclo Dia/Noite em Godot 4: Tutorial Completo para Games Mais Imersivos

Um ciclo de dia e noite pode enriquecer a experiência dos seus jogos, proporcionando variações visuais e mecânicas de jogo interessantes. Jogos como Minecraft, Animal Crossing e Don’t Starve são exemplos notáveis que utilizam essa técnica com sucesso. Se o seu jogo possui elementos em tempo real, considerar a implementação de um ciclo dia-noite pode ser uma excelente escolha.

Felizmente, no Godot 4, adicionar um ciclo dia-noite tornou-se uma tarefa mais simples e acessível.

Preparando o Ambiente no Godot

Antes de começar a codificar o ciclo dia-noite, é fundamental preparar o terreno para o seu jogo. Inicialize um novo projeto 2D no Godot 4 e configure as definições básicas do projeto.

O código que utilizaremos neste artigo está disponível neste Repositório GitHub, e você pode utilizá-lo livremente sob a licença MIT.

Em seguida, crie um personagem jogável. Na sua cena, adicione um nó CharacterBody2D. Dentro deste nó, adicione um CollisionShape2D com um formato retangular e um Sprite2D. Isso servirá para representar visualmente o seu personagem.

Para possibilitar o movimento do jogador, você pode utilizar 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á que o jogador se movimente para a esquerda, direita, cima e baixo utilizando as teclas de seta. Você pode também adicionar alguns inimigos que o jogador terá que evitar. Utilize nós StaticBody2D para esses inimigos, ajustando suas formas e posições conforme necessário.

Implementando um Temporizador para o Ciclo Dia-Noite

Para criar um ciclo dia-noite, necessitamos de um temporizador que funcione continuamente, alternando entre os períodos de dia e noite. Este temporizador será o responsável por controlar o fluxo do tempo dentro do seu jogo.

Adicione um nó Timer à sua cena no Godot. Para isso, clique com o botão direito no painel Cena, selecione “Adicionar nó” e procure por “Temporizador” na biblioteca de nós.

Renomeie o nó Timer para algo mais descritivo, como “DayNightTimer”, para facilitar a identificação. Configure as propriedades do nó Timer no painel Inspetor. Defina a propriedade “Wait Time” para 0 (este é o atraso inicial antes do início do temporizador) e marque a propriedade “One Shot” para que o temporizador se repita.

Agora, adicione o código GDScript que irá gerenciar 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, iniciamos o DayNightTimer quando a cena é carregada, dando início ao ciclo dia-noite. A função _on_DayNightTimer_timeout será executada sempre que o temporizador chegar a zero, que é quando se realiza a transição entre o dia e a noite.

Seguindo estes passos, você terá um temporizador funcional de dia e noite, que fará a transição entre os dois períodos, permitindo adicionar elementos dinâmicos e mudanças visuais ao seu jogo Godot com base na hora do dia.

Adaptando o Plano de Fundo para o Dia e Noite

Para complementar o seu ciclo dia-noite, é preciso ter uma forma de representar visualmente as transições entre o dia e a noite. Podemos utilizar um nó ColorRect, que já vem integrado no Godot, para criar um plano de fundo adequado tanto para o dia quanto para a noite. Esta abordagem permite transições mais suaves e um maior controle sobre o aspeto visual.

Na sua cena do Godot, adicione um nó ColorRect. Este nó servirá como plano de fundo que altera a cor para representar o dia e a noite. Renomeie o nó ColorRect para algo descritivo, como “BackgroundRect”. Posicione-o como uma camada de fundo, garantindo que 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 que ele funcione 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-a como preta quando a transição for para a noite, criando um fundo escuro. Ao fazer a transição para o dia, defina-a para um azul claro.

Efeitos Sonoros para o Ciclo Dia-Noite

Efeitos sonoros podem desempenhar um papel fundamental para aumentar a imersão e o realismo do seu ciclo dia-noite no Godot. Eles fornecem pistas auditivas aos jogadores, tornando a transição entre o dia e a noite mais envolvente. Você pode adicionar efeitos sonoros facilmente ao seu jogo no Godot.

Antes de começar, certifique-se de ter os recursos de áudio (arquivos de som) que representem os sons do dia e da noite. Por exemplo, você pode ter o canto dos pássaros durante o dia e o som de grilos ou corujas durante a noite.

Na sua cena no Godot, adicione dois nós AudioStreamPlayer2D e nomeie-os de acordo com a sua função. Você pode nomeá-los como “$DaytimeSounds” e “$NighttimeSounds”.

Agora, atualize o código GDScript para gerir 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 temporizador do dia e da noite expira, este código verifica para qual fase deve fazer a transição e reproduz os sons correspondentes.

Sinta-se à vontade para personalizar os seus efeitos sonoros sem direitos autorais, para que eles combinem com o tema e a atmosfera do seu jogo. Você também pode sobrepor várias faixas de áudio ou utilizar efeitos de áudio (reverb, eco, etc.) para criar uma experiência auditiva mais rica.

Torne os seus Jogos no Godot Mais Envolventes com um Ciclo Dia-Noite

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

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