晝夜交替的循環能夠為您的遊戲注入更深層的沉浸感,它不僅能豐富視覺上的多樣性,更能催生出許多饒富趣味的遊戲機制。《我的世界》、《動物森友會》以及《飢荒》等知名遊戲都巧妙地運用了這種技術。若您的遊戲中含有即時運算的元素,不妨考慮也加入這個設計。
值得慶幸的是,在 Godot 4 中,要實現晝夜循環比以往任何時候都來得更加便捷。
設定 Godot 遊戲專案
在深入探討晝夜循環的實作之前,請先為您的遊戲奠定穩固的基礎。 首先,在 Godot 4 中建立一個全新的 2D 專案,並設定好必要的專案配置。
本文所使用的程式碼可以在這個 GitHub 儲存庫 中找到,並且是以 MIT 許可免費釋出的。
接著,創建一個玩家角色。 在您的場景中加入一個 CharacterBody2D 節點,並在其中添加一個具有矩形外型的 CollisionShape2D 和一個 Sprite2D。 這將作為您角色的視覺化呈現。
若要讓玩家能夠移動,您可以使用以下的 GDScript 程式碼。 將此腳本附加到您的角色節點:
extends CharacterBody2Dvar speed = 300
func _physics_process(delta):
var input_dir = Vector2.ZEROif Input.is_action_pressed("ui_left"):
input_dir.x -= 1if Input.is_action_pressed("ui_right"):
input_dir.x += 1if Input.is_action_pressed("ui_up"):
input_dir.y -= 1if Input.is_action_pressed("ui_down"):
input_dir.y += 1velocity = input_dir.normalized() * speed
move_and_collide(velocity * delta)
這段程式碼將允許玩家透過方向鍵來向左、向右、向上和向下移動。 您也可以添加一些敵人讓玩家閃躲。針對這些敵人,請使用 StaticBody2D 節點,並據此調整它們的形狀與位置。
添加晝夜循環的計時器
要建立晝夜循環,您需要一個能夠持續運作的計時器,在白天和夜晚之間交替。 這個計時器將負責追蹤遊戲中時間的流逝。
請將計時器節點添加到您的 Godot 場景中。 您可以透過在「場景」面板上點擊右鍵,選擇「新增節點」,接著在節點庫中搜尋「計時器」來完成此動作。
為了保持清晰,請將 Timer 節點重新命名為具有意義的名稱,像是 DayNightTimer。在檢查器面板中配置計時器節點的屬性。 特別是將「等待時間」屬性設定為 0(這是計時器啟動前的初始延遲),並勾選「單次」屬性,以便讓計時器重複運作。
現在,添加用於管理晝夜循環的 GDScript 程式碼:
extends Node2Dvar day_duration = 30
var night_duration = 30var 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。 將其放置在背景圖層,確保它覆蓋整個視口。
在「檢查器」面板中,將「顏色」屬性設定為初始的背景顏色,這個顏色應該代表白天。 例如,您可以使用 Color(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 遊戲添加音效。
在開始之前,請確保您擁有代表白天和夜晚聲音的音訊資源(聲音檔案)。 例如,白天可能會聽到鳥鳴聲,晚上可能會聽到蟋蟀或貓頭鷹的叫聲。
在您的 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 遊戲中實作晝夜循環,可以顯著地增強玩家的沉浸感和參與度。 它為您的遊戲世界增添了深度,引入了動態的遊戲元素,並允許創造性地講述故事。
請務必根據您遊戲獨特的主題和機制來客製化晝夜循環,並勇於嘗試不同的視覺和遊戲效果,以創造出真正引人入勝的遊戲體驗。