Як реалізувати цикл день-ніч у Godot

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

На щастя, у Godot 4 досягти циклу день-ніч простіше, ніж будь-коли.

Налаштування гри «Годо».

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

Код, використаний у цій статті, доступний тут Репозиторій GitHub і є безкоштовним для використання за ліцензією MIT.

Тепер створіть персонажа гравця. До вашої сцени додайте CharacterBody2D. Усередині нього додайте CollisionShape2D із прямокутною формою та Sprite2D. Це візуально представить ваш персонаж.

Щоб дозволити гравцеві рухатися, ви можете використовувати наступний код 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 до сцени Godot. Ви можете зробити це, клацнувши правою кнопкою миші на панелі «Сцена», вибравши «Додати вузол», а потім знайшовши «Таймер» у бібліотеці вузлів.

Для ясності перейменуйте вузол Timer на щось значуще, наприклад DayNightTimer. Налаштуйте властивості вузла Timer на панелі Inspector. Зокрема, установіть для властивості «Час очікування» значення 0 (це початкова затримка перед запуском таймера) і перевірте властивість «Один удар», щоб таймер повторювався.

Тепер додайте код GDScript, який керує циклом день-ніч:

 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

        

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

Виконуючи ці кроки, ви отримаєте функціональний таймер день-ніч, який перемикається між днем ​​і ніччю, дозволяючи вам додавати динамічні елементи ігрового процесу та візуальні зміни до вашої гри Godot залежно від часу доби.

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

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

До сцени Godot додайте вузол ColorRect. Цей вузол слугуватиме фоном, який змінює колір, щоб позначати день і ніч. Перейменуйте вузол ColorRect на щось значуще, наприклад BackgroundRect. Розташуйте його як фоновий шар, переконавшись, що він покриває все вікно перегляду.

На панелі інспектора встановіть властивість «Колір» на початковий колір фону, який має відображати денний час. Наприклад, ви можете використовувати колір (0,5, 0,5, 0,8) для світло-блакитного денного неба.

Тепер оновіть свій код GDScript для роботи з вузлом 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)

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

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

Звукові ефекти можуть зіграти вирішальну роль у посиленні занурення та реалістичності вашого циклу день-ніч у Годо. Вони надають гравцям звукові підказки, роблячи перехід між днем ​​і ніччю більш захоплюючим. Ви можете легко додати звукові ефекти до своєї гри Godot.

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

До вашої сцени Godot додайте два вузли AudioStreamPlayer2D і назвіть їх відповідно. Ви можете назвати їх щось на зразок $DaytimeSounds і $NighttimeSounds.

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

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

Коли таймер день-ніч закінчується, цей код перевіряє, до якої фази він має перейти, і відтворює відповідні звуки.

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

Зробіть свої ігри Godot більш захоплюючими завдяки циклу день-ніч

Впровадження циклу день-ніч у вашій грі Godot може значно покращити занурення та залученість гравця. Він додає глибини вашому ігровому світу, вводить динамічні елементи ігрового процесу та дозволяє творчо розповідати історії.

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