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

Створення динамічного циклу дня і ночі в іграх Godot

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

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

Підготовка ігрового середовища в Godot

Перш ніж почати створення циклу дня і ночі, вам необхідно підготувати основу вашої гри. Створіть новий 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” в списку доступних вузлів.

Для зручності, перейменуйте вузол Timer на щось зрозуміле, наприклад DayNightTimer. На панелі 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 спрацьовує кожного разу, коли таймер досягає нуля, сигналізуючи про зміну між днем і ніччю.

За допомогою цих кроків ви створите робочий таймер дня і ночі, який перемикається між денною і нічною фазами, дозволяючи вам додавати динамічні елементи в ігровий процес і візуальні зміни залежно від часу доби.

Зміна фону в залежності від часу доби

Для візуалізації зміни дня і ночі вам потрібен спосіб показувати ці переходи. Використовуйте вузол ColorRect для створення відповідного фону для дня і ночі. Цей підхід забезпечить плавні переходи і більший контроль над візуальними ефектами.

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

В панелі Inspector встановіть властивість “Колір” на початковий колір фону, який має відображати денний час. Наприклад, можна використати колір (0.5, 0.5, 0.8) для світло-блакитного денного неба.

Тепер оновіть код GDScript для керування кольором фону:

 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 у вашу сцену Godot і назвіть їх відповідно, наприклад $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 може суттєво покращити занурення і залучення гравців. Він додає глибини вашому ігровому світу, вносить динамічні елементи ігрового процесу і дозволяє творчо розповідати історії.

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