群組

Godot 中的群組功能類似於其他軟體的標籤。你可以將一個節點加入任意數量的群組。之後,你可以在程式碼中透過 SceneTree 進行以下操作:

  • 取得群組中的節點清單。

  • 對群組內所有節點呼叫某個方法。

  • 向群組內所有節點發送通知。

這個功能對於管理大型場景及降低程式碼耦合度非常有用。

管理群組

群組是在你將節點新增到一個新的群組名稱時建立的,當某一個群組中的所有節點都被移除時,該群組也就不存在了。

有兩種方式可以將節點加入或移除群組:

  • 設計階段時,可以在編輯器內透過「節點」面板的「群組」分頁,或在專案設定中的「全域群組」來管理。

  • 執行階段時,使用 Node.add_to_group()Node.remove_from_group() 來加入或移除群組。

使用節點面板

你可以在「節點」面板中的「群組」分頁建立新的群組。

../../_images/groups_node_tab.webp

在「場景」面板中選擇一個節點,然後點選帶有「+」符號的新增按鈕。

../../_images/groups_add_new_group_button.webp

此時會跳出「建立新群組」的視窗,請在欄位中輸入群組名稱。

你可以選擇勾選「全域」選項,這樣該群組將會在整個專案中可見,並可於任何場景重複使用。此時也能為群組新增描述。

完成後,按下「確定」以建立群組。

../../_images/groups_add_new_group_modal.webp

你會在「群組」分頁下看到新群組:若未勾選「全域」,會顯示於「場景群組」;若勾選,則於「全域群組」下顯示。

在「群組」分頁中,勾選群組名稱左側的核取方塊即可將場景面板選中的節點加入群組。新建群組時,當前選中的節點會自動被勾選加入該群組。

../../_images/groups_node_tab_with_created_groups.webp

所有在專案中被設為全域的群組,不論在哪個場景建立,都會在「全域群組」下顯示。

其他從目前場景節點建立的群組則會顯示在「場景群組」下。

警告

全域群組和場景群組的底層邏輯完全相同,只是歸類方式不同。具有相同名稱的群組會被視為同一個群組。這個設計純粹是為了組織方便。

../../_images/groups_node_tab_with_multiple_types_of_groups.webp

你可以在「專案設定」中的「全域群組」面板中管理全域群組,包含新增、修改名稱與描述等操作。

../../_images/groups_global_groups_settings.webp

使用程式碼

你也可以用腳本來管理群組。下列程式碼會在節點進入場景樹時,將其加入 guards 群組。

func _ready():
    add_to_group("guards")

假設你正在開發一款潛行遊戲。當有敵人發現玩家時,你希望所有守衛與機器人都進入警戒狀態。

在下方的範例中,我們使用 SceneTree.call_group() 來通知所有敵人,玩家已被發現。

func _on_player_spotted():
    get_tree().call_group("guards", "enter_alert_mode")

上述程式碼會對 guards 群組所有成員呼叫 enter_alert_mode 方法。

如果你想取得 guards 群組所有節點的陣列,可以呼叫 SceneTree.get_nodes_in_group()

var guards = get_tree().get_nodes_in_group("guards")

SceneTree 類別還提供許多實用方法,方便你操作場景、節點階層與群組,例如可以輕鬆切換或重新載入場景、結束遊戲、暫停與取消暫停等。此外也有很多實用訊號可供使用。