Jak zaimplementować cykl dnia i nocy w Godot

Photo of author

By maciekx

System dnia i nocy potrafi wnieść do gier element głębi, wzbogacić oprawę wizualną oraz wykreować intrygujące mechaniki. Tytuły takie jak Minecraft, Animal Crossing czy Don’t Starve udowadniają skuteczność tego rozwiązania. Warto rozważyć jego implementację, szczególnie w produkcjach z elementami czasu rzeczywistego.

Dobra wiadomość jest taka, że w Godot 4 stworzenie cyklu dnia i nocy jest prostsze niż kiedykolwiek.

Przygotowanie projektu w Godot

Zanim zagłębimy się w proces implementacji systemu dnia i nocy, warto przygotować solidne fundamenty. Zacznij od utworzenia nowego projektu 2D w silniku Godot 4. Dokonaj niezbędnych ustawień projektowych.

Kod wykorzystany w tym artykule można znaleźć w repozytorium GitHub. Jest on dostępny bezpłatnie na licencji MIT.

Następnie stwórz postać gracza. Dodaj do sceny węzeł CharacterBody2D. W jego wnętrzu umieść CollisionShape2D o kształcie prostokąta oraz Sprite2D, który będzie reprezentował wizualnie postać.

Aby umożliwić graczowi ruch, zastosuj poniższy kod GDScript. Dołącz go do węzła postaci:

 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)

Ten fragment kodu pozwoli graczowi poruszać się w czterech kierunkach za pomocą klawiszy strzałek. Możesz również dodać kilku przeciwników, których gracz będzie unikać. Wykorzystaj węzły StaticBody2D, dostosowując ich kształty oraz pozycje.

Implementacja timera dla cyklu dnia i nocy

Aby system dnia i nocy działał prawidłowo, potrzebny jest licznik czasu, który w sposób ciągły będzie przełączał się pomiędzy fazami dnia i nocy. To on będzie odpowiedzialny za kontrolę upływającego czasu w grze.

Dodaj węzeł Timer do swojej sceny Godot. Możesz to zrobić, klikając prawym przyciskiem myszy w panelu Scena, wybierając „Dodaj węzeł”, a następnie wyszukując Timer w bibliotece węzłów.

Dla zachowania przejrzystości, zmień nazwę węzła Timer na bardziej zrozumiałą, na przykład „DayNightTimer”. W panelu „Inspektor” skonfiguruj właściwości węzła. Ustaw „Czas oczekiwania” na 0 (opóźnienie startu timera) i zaznacz właściwość „One Shot”, aby timer działał w pętli.

Teraz dodaj kod GDScript odpowiedzialny za zarządzanie cyklem dnia i nocy:

 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

        

Funkcja _ready() uruchamia DayNightTimer po załadowaniu sceny, rozpoczynając cykl dnia i nocy. Z kolei _on_DayNightTimer_timeout() jest wywoływana, gdy licznik osiągnie zero, sygnalizując konieczność zmiany fazy.

Wykonując powyższe kroki, zyskujesz funkcjonalny licznik dnia i nocy, który przełącza się między tymi fazami, pozwalając na wprowadzenie dynamicznych elementów rozgrywki i zmian wizualnych w twojej grze Godot, zależnych od pory dnia.

Zmiana tła w zależności od pory dnia

Aby system dnia i nocy był kompletny, potrzebujesz sposobu wizualnego odzwierciedlenia przejść między tymi fazami. Możesz wykorzystać wbudowany węzeł ColorRect, aby stworzyć odpowiednie tło dla dnia i nocy. Takie podejście oferuje płynniejsze przejścia i większą kontrolę nad efektami wizualnymi.

W scenie Godot dodaj węzeł ColorRect. Będzie on pełnił funkcję tła, zmieniając kolor w zależności od pory dnia. Zmień nazwę tego węzła na bardziej opisową, np. „BackgroundRect”. Ustaw go jako warstwę tła, tak aby zakrywał cały ekran.

W panelu „Inspektor” ustaw właściwość Kolor na początkową barwę tła, która będzie reprezentować dzień. Na przykład, użyj koloru (0.5, 0.5, 0.8) dla jasnoniebieskiego nieba w ciągu dnia.

Teraz zaktualizuj swój kod GDScript, aby współpracował z węzłem 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)

Kod ten aktualizuje kolor węzła BackgroundRect, aby odzwierciedlał porę dnia. Na przykład, podczas przejścia w noc, ustaw kolor na czarny, tworząc ciemne tło. Podczas przechodzenia w dzień, ustaw go na jasnoniebieski.

Efekty dźwiękowe dla systemu dnia i nocy

Efekty dźwiękowe odgrywają ważną rolę w zwiększaniu immersji i realizmu systemu dnia i nocy w Godot. Dostarczają graczom wskazówek dźwiękowych, czyniąc przejścia między dniami i nocami bardziej wciągającymi. Dodanie efektów dźwiękowych do gry Godot jest proste.

Upewnij się, że posiadasz zasoby audio (pliki dźwiękowe), które będą reprezentować dźwięki dzienne i nocne. Na przykład, w ciągu dnia możesz odtwarzać śpiew ptaków, a w nocy odgłosy świerszczy lub sów.

W scenie Godot dodaj dwa węzły AudioStreamPlayer2D i nadaj im odpowiednie nazwy. Możesz nazwać je, na przykład, $DaytimeSounds i $NighttimeSounds.

Teraz zaktualizuj swój kod GDScript, aby zarządzał przejściami dźwiękowymi pomiędzy dniem i nocą:

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

W momencie, gdy timer dnia i nocy osiągnie wartość zero, kod ten sprawdza, w którą fazę powinien przejść i odtwarza odpowiednie dźwięki.

Możesz swobodnie modyfikować efekty dźwiękowe, wykorzystując materiały wolne od praw autorskich, tak aby pasowały do tematyki i klimatu twojej gry. Możesz także nakładać na siebie wiele ścieżek audio lub używać efektów dźwiękowych (pogłos, echo, itd.), aby uzyskać bogatsze wrażenia słuchowe.

Uatrakcyjnij swoje gry Godot, wprowadzając system dnia i nocy

Implementacja systemu dnia i nocy w grze Godot znacząco podnosi poziom immersji i zaangażowania gracza. Dodaje głębi światu gry, wprowadza dynamiczne elementy rozgrywki i umożliwia kreatywne opowiadanie historii.

Pamiętaj, aby dostosować system dnia i nocy do unikalnej tematyki i mechanik swojej gry. Nie wahaj się eksperymentować z różnymi efektami wizualnymi oraz elementami rozgrywki, aby stworzyć niezapomniane wrażenia dla graczy.


newsblog.pl