Comment mettre en œuvre un cycle jour-nuit dans Godot

Un cycle jour-nuit peut ajouter un élément immersif à vos jeux, ajouter de la variété aux visuels et créer des mécanismes intéressants. Des jeux comme Minecraft, Animal Crossing et Don’t Starve utilisent cette technique efficacement, et vous pourriez envisager de l’ajouter à vos propres jeux, en particulier ceux comportant un élément en temps réel.

Heureusement, dans Godot 4, réaliser un cycle jour-nuit est plus facile que jamais.

Configuration du jeu Godot

Avant de vous lancer dans la mise en œuvre du cycle jour-nuit, établissez les bases de votre jeu. Commencez par créer un nouveau projet 2D dans Godot 4. Configurez votre projet avec les paramètres de projet nécessaires.

Le code utilisé dans cet article est disponible dans ce Dépôt GitHub et son utilisation est gratuite sous la licence MIT.

Maintenant, créez un personnage de joueur. Dans votre scène, ajoutez un CharacterBody2D. À l’intérieur, ajoutez un CollisionShape2D avec une forme de rectangle et un Sprite2D. Cela représentera visuellement votre personnage.

Pour permettre au joueur de se déplacer, vous pouvez utiliser le code GDScript suivant. Attachez ce script à votre nœud de personnage :

 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)

Ce code permettra au joueur de se déplacer vers la gauche, la droite, le haut et le bas à l’aide des touches fléchées. Vous pouvez également ajouter des ennemis que votre joueur pourra esquiver. Utilisez les nœuds StaticBody2D pour ces ennemis et ajustez leurs formes et positions en conséquence.

Ajouter une minuterie pour le cycle jour et nuit

Pour créer un cycle jour-nuit, vous avez besoin d’une minuterie qui fonctionne en continu, en alternant les phases jour et nuit. Ce chronomètre sera chargé de suivre le passage du temps dans votre jeu.

Ajoutez un nœud Timer à votre scène Godot. Vous pouvez le faire en cliquant avec le bouton droit dans le panneau Scène, en choisissant Ajouter un nœud, puis en recherchant Timer dans la bibliothèque de nœuds.

Renommez le nœud Timer en quelque chose de significatif comme DayNightTimer pour plus de clarté. Configurez les propriétés du nœud Timer dans le panneau Inspecteur. Plus précisément, définissez la propriété Wait Time sur 0 (il s’agit du délai initial avant le démarrage du minuteur) et vérifiez la propriété One Shot afin que le minuteur se répète.

Maintenant, ajoutez un code GDScript qui gère le cycle jour-nuit :

 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

        

Dans la fonction _ready, démarrez DayNightTimer lorsque la scène se charge pour relancer le cycle jour-nuit. La fonction _on_DayNightTimer_timeout s’exécutera chaque fois que la minuterie atteint zéro, c’est-à-dire lorsqu’il est temps de passer du jour à la nuit.

En suivant ces étapes, vous disposerez d’une minuterie jour-nuit fonctionnelle qui passe du jour à la nuit, vous permettant d’ajouter des éléments de jeu dynamiques et des changements visuels à votre jeu Godot en fonction de l’heure de la journée.

Adapter l’arrière-plan pour le jour et la nuit

Pour compléter votre cycle jour-nuit, vous avez besoin d’un moyen de représenter visuellement les transitions entre le jour et la nuit. Vous pouvez utiliser un nœud ColorRect intégré pour créer un arrière-plan approprié pour le jour et la nuit. Cette approche permet des transitions plus fluides et un meilleur contrôle sur les visuels.

Dans votre scène Godot, ajoutez un nœud ColorRect. Ce nœud vous servira d’arrière-plan qui change de couleur pour représenter le jour et la nuit. Renommez le nœud ColorRect en quelque chose de significatif comme BackgroundRect. Positionnez-le comme calque d’arrière-plan, en vous assurant qu’il couvre toute la fenêtre.

Dans le panneau Inspecteur, définissez la propriété Color sur votre couleur d’arrière-plan initiale, qui doit représenter la journée. Par exemple, vous pouvez utiliser Color(0.5, 0.5, 0.8) pour un ciel diurne bleu clair.

Maintenant, mettez à jour votre code GDScript pour fonctionner avec le nœud 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)

Mettez à jour la couleur du nœud BackgroundRect pour refléter l’heure de la journée. Par exemple, réglez-le sur noir lors de la transition vers la nuit, créant ainsi un arrière-plan sombre. Lors de la transition vers le jour, réglez-le sur bleu clair.

Effets sonores pour le cycle jour-nuit

Les effets sonores peuvent jouer un rôle crucial dans l’amélioration de l’immersion et du réalisme de votre cycle jour-nuit dans Godot. Ils fournissent des signaux auditifs aux joueurs, rendant la transition entre le jour et la nuit plus captivante. Vous pouvez facilement ajouter des effets sonores à votre jeu Godot.

Avant de commencer, assurez-vous de disposer de ressources audio (fichiers son) qui représentent les sons du jour et de la nuit. Par exemple, vous pourriez entendre des gazouillis d’oiseaux pendant la journée et des criquets ou des hiboux pour la nuit.

Dans votre scène Godot, ajoutez deux nœuds AudioStreamPlayer2D et nommez-les de manière appropriée. Vous pouvez les nommer quelque chose comme $DaytimeSounds et $NighttimeSounds.

Maintenant, mettez à jour le code GDScript pour gérer les transitions sonores entre le jour et la nuit :

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

Lorsque la minuterie jour-nuit expire, ce code vérifie à quelle phase il doit passer et joue les sons appropriés qui correspondent.

N’hésitez pas à personnaliser vos effets sonores libres de droits pour les adapter au thème et à l’atmosphère de votre jeu. Vous pouvez également superposer plusieurs pistes audio ou utiliser des effets audio (réverbération, écho, etc.) pour créer une expérience auditive plus riche.

Rendez vos jeux Godot plus attrayants avec un cycle jour-nuit

La mise en œuvre d’un cycle jour-nuit dans votre jeu Godot peut améliorer considérablement l’immersion et l’engagement des joueurs. Il ajoute de la profondeur à votre monde de jeu, introduit des éléments de jeu dynamiques et permet une narration créative.

N’oubliez pas d’adapter le cycle jour-nuit au thème et aux mécanismes uniques de votre jeu, et n’hésitez pas à expérimenter différents effets visuels et de jeu pour créer une expérience de jeu vraiment captivante.