Střídání dne a noci může do vašich her vnést prvek pohlcení, oživit vizuální stránku a vytvořit zajímavou herní mechaniku. Hry jako Minecraft, Animal Crossing a Don’t Starve tuto techniku s úspěchem využívají a vy můžete zvážit její začlenění do svých vlastních projektů, zejména pokud se jedná o hry s prvky reálného času.
Naštěstí, v enginu Godot 4 je implementace cyklu dne a noci jednodušší než kdy dříve.
Základní nastavení hry v Godot
Než se pustíte do samotné implementace cyklu dne a noci, je důležité mít připravené základy vaší hry. Začněte tím, že v Godot 4 vytvoříte nový 2D projekt. Nastavte jej s ohledem na potřebná nastavení.
Kód, který se v tomto článku používá, je k dispozici v tomto repozitáři na GitHubu a můžete jej volně používat pod licencí MIT.
Nyní vytvořte herní postavu. Do scény vložte uzel CharacterBody2D. Uvnitř něj přidejte CollisionShape2D s tvarem obdélníku a Sprite2D. To bude vizuálně reprezentovat vaši postavu.
Pro umožnění pohybu hráče můžete použít následující GDScript kód. Připojte tento skript k uzlu postavy:
extends CharacterBody2Dvar rychlost = 300
func _physics_process(delta):
var smer_pohybu = Vector2.ZEROif Input.is_action_pressed("ui_left"):
smer_pohybu.x -= 1if Input.is_action_pressed("ui_right"):
smer_pohybu.x += 1if Input.is_action_pressed("ui_up"):
smer_pohybu.y -= 1if Input.is_action_pressed("ui_down"):
smer_pohybu.y += 1velocity = smer_pohybu.normalized() * rychlost
move_and_collide(velocity * delta)
Tento kód umožní hráči pohybovat se doleva, doprava, nahoru a dolů pomocí šipek. Můžete také přidat několik nepřátel, kterým se hráč bude vyhýbat. Pro nepřátele použijte uzly StaticBody2D a upravte jejich tvary a pozice.
Přidání časovače pro cyklus dne a noci
Pro vytvoření cyklu dne a noci budete potřebovat časovač, který běží nepřetržitě a střídá denní a noční fáze. Tento časovač bude sledovat plynutí času ve hře.
Do scény v Godotu přidejte uzel typu Timer. To provedete kliknutím pravým tlačítkem myši na panel Scéna, vyberete Přidat uzel a v knihovně uzlů vyhledáte „Timer“.
Pro lepší přehlednost přejmenujte uzel Timer na něco smysluplného, například DayNightTimer. V panelu Inspektor nakonfigurujte vlastnosti uzlu Timer. Zejména nastavte vlastnost Wait Time na 0 (což je počáteční zpoždění před spuštěním časovače) a zaškrtněte vlastnost One Shot, aby se časovač opakoval.
Nyní přidejte GDScript kód pro správu cyklu dne a noci:
extends Node2Dvar delka_dne = 30
var delka_noci = 30var je_den = true
func _ready():
$DayNightTimer.start()func _on_DayNightTimer_timeout():
if je_den:
$DayNightTimer.start(delka_dne)
je_den = false
else:
$DayNightTimer.start(delka_noci)
je_den = true
Ve funkci _ready spustíte časovač DayNightTimer po načtení scény, čímž se cyklus dne a noci spustí. Funkce _on_DayNightTimer_timeout se spustí pokaždé, když časovač dosáhne nuly, což signalizuje čas pro přechod mezi dnem a nocí.
Dodržováním těchto kroků získáte funkční časovač pro cyklus dne a noci, který střídá denní a noční fáze. To vám umožní přidávat dynamické herní prvky a vizuální změny do vaší Godot hry v závislosti na denní době.
Přizpůsobení pozadí pro den a noc
Pro doplnění cyklu dne a noci je zapotřebí způsob, jak vizuálně znázornit přechody mezi dnem a nocí. Pro vytvoření vhodného pozadí pro den i noc můžete použít zabudovaný uzel ColorRect. Tento přístup umožňuje plynulejší přechody a větší kontrolu nad vizuální stránkou.
Ve scéně Godot přidejte uzel typu ColorRect. Tento uzel bude sloužit jako pozadí, které bude měnit barvu pro reprezentaci dne a noci. Přejmenujte uzel ColorRect na něco smysluplného, například BackgroundRect. Umístěte jej jako vrstvu pozadí a zajistěte, aby pokrýval celý viewport.
V panelu Inspektor nastavte vlastnost Barva na počáteční barvu pozadí, která by měla reprezentovat denní dobu. Můžete například použít barvu (0.5, 0.5, 0.8) pro světle modrou denní oblohu.
Nyní aktualizujte GDScript kód, aby fungoval s uzlem ColorRect:
func _on_day_night_timer_timeout():
if je_den:
$DayNightTimer.start(delka_dne)
je_den = false
$BackgroundRect.color = Color(0.5, 0.5, 0.8)
else:
$DayNightTimer.start(delka_noci)
je_den = true
$BackgroundRect.color = Color(0, 0, 0)
Aktualizujte barvu uzlu BackgroundRect tak, aby odrážela denní dobu. Například ji nastavte na černou při přechodu do noci, čímž vytvoříte tmavé pozadí. Při přechodu na den ji nastavte na světle modrou.
Zvukové efekty pro cyklus dne a noci
Zvukové efekty hrají klíčovou roli při vylepšování ponoření a realismu cyklu dne a noci ve hrách Godot. Poskytují hráčům sluchové podněty, díky nimž je přechod mezi dnem a nocí poutavější. Do hry v Godotu můžete snadno přidat zvukové efekty.
Než začnete, ujistěte se, že máte zvukové zdroje (zvukové soubory) které reprezentují denní a noční zvuky. Například přes den to může být ptačí cvrlikání a v noci cvrčci nebo houkání sovy.
Do scény v Godotu přidejte dva uzly AudioStreamPlayer2D a pojmenujte je podle toho. Můžete je pojmenovat $DaytimeSounds a $NighttimeSounds.
Nyní aktualizujte kód v GDScript pro správu zvukových přechodů mezi dnem a nocí:
func _on_day_night_timer_timeout():
if je_den:
$DayNightTimer.start(delka_dne)
je_den = false
$NighttimeSounds.stop()
$DaytimeSounds.play()
else:
$DayNightTimer.start(delka_noci)
je_den = true
$DaytimeSounds.stop()
$NighttimeSounds.play()
Když časový limit den-noc vyprší, tento kód zkontroluje, do které fáze má přejít a přehraje odpovídající zvuky.
Neváhejte a přizpůsobte si své zvukové efekty bez autorských práv tak, aby ladily s tématem a atmosférou vaší hry. Můžete také vrstvit více zvukových stop nebo používat zvukové efekty (reverb, echo atd.) pro bohatší zážitek.
Zajistěte, aby vaše Godot hry byly poutavější díky cyklu dne a noci
Implementace cyklu dne a noci ve hře Godot může výrazně zlepšit ponoření a zapojení hráče. Dodává hernímu světu hloubku, zavádí dynamické herní prvky a umožňuje kreativní vyprávění příběhů.
Nezapomeňte přizpůsobit cyklus dne a noci jedinečnému tématu a mechanismům vaší hry. Nebojte se experimentovat s různými vizuálními a herními efekty pro vytvoření skutečně strhujícího herního zážitku.