Как реализовать цикл день-ночь в Godot

4
компьютеры и технологии 22.webp.webp

Последнее обновление 02.03.2024 — Василий Иванов

Цикл смены дня и ночи может добавить элемент погружения в ваши игры, разнообразить визуальные эффекты и создать интересную механику. Такие игры, как Minecraft, Animal Crossing и Don’t Starve, эффективно используют эту технику, и вы можете рассмотреть возможность добавления ее в свои собственные игры, особенно с элементом реального времени.

К счастью, в Godot 4 добиться смены дня и ночи стало проще, чем когда-либо.

Настройка игры «Годо»

Прежде чем приступить к реализации цикла день-ночь, заложите основу для своей игры. Начните с создания нового 2D-проекта в Godot 4. Настройте свой проект с необходимыми настройками проекта.

Теперь создайте персонажа игрока. В вашей сцене добавьте CharacterBody2D. Внутри него добавьте CollisionShape2D с прямоугольной формой и Sprite2D. Это визуально представит вашего персонажа.

По теме:  Что такое Microsoft Copilot? Как использовать Copilot в Windows

Чтобы позволить игроку двигаться, вы можете использовать следующий код GDScript. Прикрепите этот скрипт к узлу вашего персонажа:

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)

Этот код позволит игроку перемещаться влево, вправо, вверх и вниз с помощью клавиш со стрелками. Вы также можете добавить несколько врагов, от которых ваш игрок должен уклоняться. Используйте узлы StaticBody2D для этих врагов и соответствующим образом настройте их форму и положение.

Добавьте таймер для дневного и ночного цикла

Чтобы создать цикл день-ночь, вам нужен таймер, который работает непрерывно, чередуя дневные и ночные фазы. Этот таймер будет отвечать за отслеживание хода времени в вашей игре.

Добавьте узел «Таймер» в вашу сцену Годо. Вы можете сделать это, щелкнув правой кнопкой мыши на панели «Сцена», выбрав «Добавить узел», а затем выполнив поиск «Таймер» в библиотеке узлов.

Для ясности переименуйте узел Timer во что-нибудь значимое, например DayNightTimer. Настройте свойства узла «Таймер» на панели «Инспектор». В частности, установите для свойства Wait Time значение 0 (это начальная задержка перед запуском таймера) и проверьте свойство One Shot, чтобы таймер повторялся.

Теперь добавьте код GDScript, который управляет циклом дня и ночи:

extends Node2D

var day_duration = 30# Duration of the day in seconds
var night_duration = 30# Duration of the night in seconds

var is_day = true

func _ready():
    # Start the timer when the scene loads
    $DayNightTimer.start()

func _on_DayNightTimer_timeout():
    if is_day:
        # Transition from day to night
        $DayNightTimer.start(day_duration)
        is_day = false

        # Add your code here for night-specific actions or visual changes
    else:
        # Transition from night to day
        $DayNightTimer.start(night_duration)
        is_day = true

        # Add your code here for day-specific actions or visual changes

В функции _ready запустите DayNightTimer при загрузке сцены, чтобы запустить цикл день-ночь. Функция _on_DayNightTimer_timeout будет запускаться каждый раз, когда таймер достигает нуля, то есть когда приходит время перехода между днем ​​и ночью.

Выполнив эти шаги, вы получите функциональный таймер дня и ночи, который переключает день и ночь, что позволит вам добавлять динамические элементы игрового процесса и визуальные изменения в вашу игру Godot в зависимости от времени суток.

Адаптация фона для дня и ночи

Чтобы дополнить цикл дня и ночи, вам нужен способ визуально представить переходы между днем ​​и ночью. Вы можете использовать встроенный нод ColorRect для создания подходящего фона как для дня, так и для ночи. Такой подход обеспечивает более плавные переходы и больший контроль над визуальными эффектами.

В вашей сцене Godot добавьте нод ColorRect. Этот узел будет служить фоном, который меняет цвет, обозначая день и ночь. Переименуйте узел ColorRect во что-нибудь значимое, например BackgroundRect. Расположите его как фоновый слой, убедившись, что он покрывает всю область просмотра.

На панели «Инспектор» установите для свойства Color исходный цвет фона, который должен соответствовать дневному времени. Например, вы можете использовать Color(0.5, 0.5, 0.8) для светло-голубого дневного неба.

Теперь обновите код GDScript для работы с узлом ColorRect:

func _on_day_night_timer_timeout():
    if is_day:
        # Transition from day to night
        $DayNightTimer.start(day_duration)
        is_day = false

        # Add your code here for night-specific actions or visual changes

        # Update the background color to indicate day
        $BackgroundRect.color = Color(0.5, 0.5, 0.8) # Light blue for day
    else:
        # Transition from night to day
        $DayNightTimer.start(night_duration)
        is_day = true

        # Add your code here for day-specific actions or visual changes

        # Update the background color to indicate night
        $BackgroundRect.color = Color(0, 0, 0) # Black for night

Обновите цвет узла BackgroundRect, чтобы он отражал время суток. Например, установите его на черный цвет при переходе на ночь, чтобы создать темный фон. При переходе на день установите светло-синий цвет.

Звуковые эффекты для цикла день-ночь

Звуковые эффекты могут сыграть решающую роль в улучшении погружения и реализма вашего цикла дня и ночи в Godot. Они дают игрокам звуковые сигналы, делая переход между днем ​​и ночью более увлекательным. Вы можете легко добавить звуковые эффекты в свою игру Godot.

Прежде чем начать, убедитесь, что у вас есть аудиоресурсы (звуковые файлы), представляющие звуки дня и ночи. Например, днем ​​вы можете слышать щебетание птиц, а ночью — крик сверчков или уханье совы.

В вашей сцене Godot добавьте два узла AudioStreamPlayer2D и назовите их соответствующим образом. Вы можете назвать их, например, $DaytimeSounds и $NighttimeSounds.

Теперь обновите код GDScript, чтобы управлять переходами звука между днем ​​и ночью:

func _on_day_night_timer_timeout():
    if is_day:
        # Transition from day to night
        $DayNightTimer.start(day_duration)
        is_day = false
     
        # Play daytime sounds
        $NighttimeSounds.stop() # Stop nighttime sounds
        $DaytimeSounds.play() # Start daytime sounds
         
    else:
        # Transition from night to day
        $DayNightTimer.start(night_duration)
        is_day = true

        # Play nighttime sounds
        $DaytimeSounds.stop() # Stop daytime sounds
        $NighttimeSounds.play() # Start nighttime sounds

Когда время таймера день-ночь истекает, этот код проверяет, в какую фазу он должен перейти, и воспроизводит соответствующие звуки.

Не стесняйтесь настраивать звуковые эффекты, не защищенные авторскими правами, в соответствии с темой и атмосферой вашей игры. Вы также можете накладывать несколько звуковых дорожек или использовать звуковые эффекты (реверберация, эхо и т. д.), чтобы создать более богатое звуковое впечатление.

Сделайте свои игры Godot более интересными с помощью смены дня и ночи

Реализация цикла дня и ночи в вашей игре Godot может значительно улучшить погружение и вовлеченность игрока. Он добавляет глубины вашему игровому миру, вводит динамичные элементы игрового процесса и позволяет творчески рассказывать истории.

Не забудьте адаптировать смену дня и ночи к уникальной теме и механике вашей игры и не стесняйтесь экспериментировать с различными визуальными и игровыми эффектами, чтобы создать по-настоящему захватывающий игровой процесс.