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 沒有使用限制
執行編輯器
運作時,呼叫 Node.add_to_group() 或 Node.remove_from_group()。
使用模組¶
你可以使用“節點”停靠面板中的“群組”分頁,將目前場景中的節點加進群組中。
在“場景”面板中選中若干個節點,在輸入框中填寫群組名稱,然後按一下“新增”。
現在你就應該會看到出現了群組。
在複雜的專案中,你可能會用到很多包含許多節點的群組或者大型場景。你可以使用“群組編輯器”視窗來為群組新增或刪除節點。這個視窗可以通過點擊“管理群組”按鈕打開。
出現“群組編輯器”視窗。這是一個複雜專案中的截圖,用於展示這個工具的用途。
它有三列:
目前場景中的節點所用到的群組列表。
不在目前選中的群組中的節點列表。
在群組中的節點列表。
底部的輸入框可以用來新增新的群組,或者篩選第二第三列中的節點。
備註
灰色的節點名稱意味著這個節點是從別的場景加入該群組的,你無法在這裡進行編輯。這種情況一般發生在產生實體的場景上。
使用空白字元¶
第二種方法則是使用程式碼。下面這個腳本會在目前節點一進入場景樹後立刻把它新增到 enemies
(敵人) 群組中。
func _ready():
add_to_group("guards")
public override void _Ready()
{
base._Ready();
AddToGroup("guards");
}
請想像你正在製作潛入類遊戲。敵人發現玩家後,你會希望所有守衛和機器人都進入警覺狀態。
下面的虛擬例子中,我們使用 SceneTree.call_group()
來通知所有敵人,玩家被發現了。
func _on_player_spotted():
get_tree().call_group("guards", "enter_alert_mode")
public void _OnPlayerDiscovered()
{
GetTree().CallGroup("guards", "enter_alert_mode");
}
上面的程式碼會呼叫群組 enemies
裡所有成員的 player_was_discovered
方法。
另外,也可以通過呼叫 SceneTree.get_nodes_in_group() 來取得所有 enemies
群組下的節點:
var guards = get_tree().get_nodes_in_group("guards")
var guards = GetTree().GetNodesInGroup("guards");
SceneTree 類別還提供了很多實用的方法,例如與場景、節點架構、群組等互動。也可以使用 SceneTree 來輕鬆切換場景、重新載入場景、結束遊戲、暫停以及取消暫停。SceneTree 甚至有一些很有趣的訊號。有空的話記得去看看 SceneTree 的手冊。