Contents

如何在 Godot 中實現晝夜循環

晝夜循環可以為您的遊戲添加身臨其境的元素,增加視覺效果的多樣性,並創造有趣的機制。 《我的世界》、《動物森友會》和《飢荒》等遊戲有效地使用了這項技術,您可能會考慮將其添加到您自己的遊戲中,尤其是那些具有即時元素的遊戲。

事實上,Godot 4 中融入晝夜週期的過程已被簡化到前所未有的程度。

設定戈多遊戲

為了在我們的遊戲背景下開始開發晝夜循環,謹慎的做法是我們首先建立一個堅實的基礎。這可以透過在Godot框架內啟動一個新的二維專案並確保所有相關專案參數都正確配置來實現。

本出版物中使用的程式碼可以透過 GitHub 儲存庫訪問,該儲存庫充當共享和協作的開源平台。此儲存庫存放代碼,並授予使用者免費使用它的權限,但須遵守 MIT 授權的條款。

在Unity中創建遊戲場景時,必須先透過實例化一個玩家角色物件來建立一個

為了讓玩家在遊戲環境中導航,有必要在指定的角色物件中合併一組稱為 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)

所提供的代碼使用戶能夠使用箭頭鍵來導航字元。此外,可以將主角必須躲避的對手納入其中。為此,我們可以使用 Utilize StaticBody2D 節點作為對手,並根據需要操縱它們的形式和位置。

/bc/images/player-movement-in-godot-2d.jpg

新增晝夜週期計時器

為了在視頻遊戲中實現晝夜循環,有必要加入一個連續運行的計時器,在白天和夜晚階段之間切換,作為整個遊戲體驗中經過時間的指示器。

使用滑鼠右鍵啟動「場景」面板中的上下文選單;從選擇「新增節點」後出現的可用選項清單中,選擇在節點庫搜尋結果中找到的特定計時器節點。

將 Timer 節點的名稱修改為更具描述性的標籤,例如“DayNightTimer”,以增強其易讀性。接下來,透過在檢查器面板中檢查其屬性來配置計時器節點的屬性。特別是,將「等待時間」屬性調整為零秒,這表示計時器開始之前的初步暫停,並確保啟用「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 」物件。該元素為各種視覺效果以及白天和晚上之間的過渡提供了適應性強的基礎。隨後,建議將此元件重新命名為更具描述性的標籤,例如“BackgroundRect”,以增強其易讀性。最後,透過將「BackgroundRect」放置在整個可見畫布區域上來確保將其定位為卓越層。

在“檢查器”面板中,配置“顏色”屬性以反映所需的背景色調,它像徵著白天時間。要實現此目的,請考慮使用 Color(0.5, 0.5, 0.8) 等值,它對應於柔和的藍色陰影,讓人聯想到明亮晴朗的白天天空的圖像。

更新您的 GDScript 程式碼庫以與

 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 

透過根據目前時間調整背景矩形元素的色調來修改其外觀。在從白天到夜晚的過渡期間,將背景顏色改為深黑色,以營造黑暗的氛圍。相反,在白天,採用柔和的天藍色作為背景色。

/bc/images/day-background-in-godot-2d.jpg

晝夜週期的音效

結合有效的聲音設計對於在戈多的晝夜循環中創造身臨其境的體驗至關重要。適當的音訊提示的整合可以透過提供有關環境變化的有意義的回饋來增強玩家的參與度。幸運的是,將聲音效果融入戈多專案中可以相對輕鬆地實現。

確保在開始之前,您擁有由體現白天和夜間聽覺現象的錄音組成的音訊資產。例如,可以想像,對於前者,你可能擁有鳥類的旋律,對於後者,你可能擁有蟋蟀的叫聲或貓頭鷹的叫聲。

為了將音訊提示合併到 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 遊戲中融入晝夜循環可以大大提高玩家的沉浸感和參與度。這項新增內容不僅為遊戲世界增添了一層真實感,而且還能夠引入多樣化和不斷發展的遊戲機制,並培養富有想像力的敘事。

考慮根據遊戲的特定主題和機制調整晝夜週期,同時探索各種視覺和互動元素,以創造身臨其境、引人入勝的遊戲體驗。