Up to date

This page is up to date for Godot 4.2. If you still find outdated information, please open an issue.

群組

Godot 中的群組與其他軟體中的標籤類似。你可以將節點加入任意數量的你想要的群組之中。然後在程式碼中,你可以使用 SceneTree 來:

  • 獲取某個群組中的節點列表。

  • 在群組中的所有節點上呼叫方法。

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

這個功能可以用來組織大型場景、對程式碼解耦。

管理群組

將節點新增到一個新的群組名稱中即可建立群組,同樣的,將所有節點移出某個給定的群組即為移除群組。

Godot 沒有使用限制

使用模組

你可以使用“節點”停靠面板中的“群組”分頁,將目前場景中的節點加進群組中。

../../_images/groups_node_tab.webp

在“場景”面板中選中若干個節點,在輸入框中填寫群組名稱,然後按一下“新增”。

../../_images/groups_add_node_to_group.webp

現在你就應該會看到出現了群組。

../../_images/groups_node_after_adding.webp

在複雜的專案中,你可能會用到很多包含許多節點的群組或者大型場景。你可以使用“群組編輯器”視窗來為群組新增或刪除節點。這個視窗可以通過點擊“管理群組”按鈕打開。

../../_images/groups_manage_groups_button.webp

出現“群組編輯器”視窗。這是一個複雜專案中的截圖,用於展示這個工具的用途。

../../_images/groups_group_editor_window.webp

它有三列:

  1. 目前場景中的節點所用到的群組列表。

  2. 不在目前選中的群組中的節點列表。

  3. 在群組中的節點列表。

底部的輸入框可以用來新增新的群組,或者篩選第二第三列中的節點。

備註

灰色的節點名稱意味著這個節點是從別的場景加入該群組的,你無法在這裡進行編輯。這種情況一般發生在產生實體的場景上。

使用空白字元

第二種方法則是使用程式碼。下面這個腳本會在目前節點一進入場景樹後立刻把它新增到 enemies (敵人) 群組中。

func _ready():
    add_to_group("guards")

請想像你正在製作潛入類遊戲。敵人發現玩家後,你會希望所有守衛和機器人都進入警覺狀態。

下面的虛擬例子中,我們使用 SceneTree.call_group() 來通知所有敵人,玩家被發現了。

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

上面的程式碼會呼叫群組 enemies 裡所有成員的 player_was_discovered 方法。

另外,也可以通過呼叫 SceneTree.get_nodes_in_group() 來取得所有 enemies 群組下的節點:

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

SceneTree 類別還提供了很多實用的方法,例如與場景、節點架構、群組等互動。也可以使用 SceneTree 來輕鬆切換場景、重新載入場景、結束遊戲、暫停以及取消暫停。SceneTree 甚至有一些很有趣的訊號。有空的話記得去看看 SceneTree 的手冊。