Up to date

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

グループ

Godotのグループは他のソフトウェアのタグと同じような機能です。ノードは複数のグループへ追加できます。次にコードではSceneTreeを使用して以下のことを行うことができます。

  • グループ内のノードのリストを取得。

  • グループ内のすべてのノードのメソッドを呼び出し。

  • グループ内のすべてのノードへ通知を送信。

これは大規模なシーンを整理し、コードを分離するのに便利な機能です。

グループの管理

グループは新しいグループ名へノードを追加することによって作成され、同様に特定のグループからすべてのノードを削除することによって削除されます。

グループにノードを追加/削除するには2つの方法があります。

  • 設計中にエディターのノードドック、またはプロジェクト設定のグローバルグループから追加します。

  • 実行中に Node.add_to_group() または Node.remove_from_group() を呼び出します。

ノードドックの使用

ノードドックの"グループ"タブを使用して、新しいグループを作成できます。

../../_images/groups_node_tab.webp

シーンドックで1つまたは複数のノードを選択し、"+"記号の付いた追加ボタンをクリックします。

../../_images/groups_add_new_group_button.webp

"新規グループの作成" というモーダルダイアログが表示されるはずです。フィールドにグループ名を打ち込みます。

オプションで"グローバル"オプションをマークすると、グループがプロジェクト全体で表示され、任意のプロジェクトシーンで再利用できるようになります。グローバルグループは説明を付けることもできます。

入力が完了したら、"OK"を押すとグループが作成されます。

../../_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クラスは、シーン、ノードの階層、ノードのグループとの対話など、多くの便利なメソッドを提供します。シーンを簡単に切り替えたり、リロード、ゲーム終了、一時停止、一時停止の解除もできます。そのうえ、興味深いシグナルもあります。時間があればチェックしてみてください。