グループ
Godotのグループは他のソフトウェアのタグと同じような機能です。ノードは複数のグループへ追加できます。次にコードではSceneTreeを使用して以下のことを行うことができます。
グループ内のノードのリストを取得。
グループ内のすべてのノードのメソッドを呼び出し。
グループ内のすべてのノードへ通知を送信。
これは大規模なシーンを整理し、コードを分離するのに便利な機能です。
グループの管理
グループは新しいグループ名へノードを追加することによって作成され、同様に特定のグループからすべてのノードを削除することによって削除されます。
グループにノードを追加/削除するには2つの方法があります。
設計中にエディターのノードドック、またはプロジェクト設定のグローバルグループから追加します。
実行中に Node.add_to_group() または Node.remove_from_group() を呼び出します。
ノードドックの使用
ノードドックの"グループ"タブを使用して、新しいグループを作成できます。
Select a node in the Scene dock then click the add button with the + symbol.
"新規グループの作成" というモーダルダイアログが表示されるはずです。フィールドにグループ名を打ち込みます。
オプションで"グローバル"オプションをマークすると、グループがプロジェクト全体で表示され、任意のプロジェクトシーンで再利用できるようになります。グローバルグループは説明を付けることもできます。
入力が完了したら、"OK"を押すとグループが作成されます。
"グローバル"オプションがオフの場合は"シーングループ"の下の"グループ"タブに、そのオプションがオンになっている場合は"グローバルグループ"の下に新しいグループが表示されます。
A selected Node from the Scene dock can be added into groups by marking the checkbox on the left side of the groups in the Groups dock. The node you had selected when creating a new group will be automatically checked.
プロジェクト内に存在する、グローバルとしてマークされ、任意のシーンから作成されたすべてのグループは、グローバルグループの下に表示されます。
現在のシーンのノードから派生した他のグループは、シーングループ の下に表示されます。
警告
同じベースとなるロジックがグローバルグループとシーングループの両方に使用されます。同じ名前のグループは同一とみなされます。この機能は純粋に組織的なものです。
グローバルグループは、プロジェクト設定内のグローバルグループドックで管理できます。そこで新しいグローバルグループを追加したり、既存のグループの名前や説明を変更したりできます。
コードの使用
スクリプトからグループを管理することもできます。次のコードはスクリプトをアタッチするノードがシーンツリーに入ったときに guards グループに追加します。
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");
}
上記のコードは、グループ guards のすべてのメンバーに対して関数 enter_alert_mode を呼び出します。
guards グループ内のノードの完全なリストを配列として取得するには、 SceneTree.get_nodes_in_group() を呼び出すことができます。
var guards = get_tree().get_nodes_in_group("guards")
var guards = GetTree().GetNodesInGroup("guards");
SceneTreeクラスは、シーン、ノードの階層、ノードのグループとの対話など、多くの便利なメソッドを提供します。シーンを簡単に切り替えたり、リロード、ゲーム終了、一時停止、一時停止の解除もできます。そのうえ、興味深いシグナルもあります。時間があればチェックしてみてください。