はじめに
ゲーム内に独立したウィンドウを作りたい——インベントリを別ウィンドウで開く、キャラクターステータスをフローティングウィンドウで表示する、そんな「ゲーム内ウィンドウ」を実現するのが Window ノードです。
この記事では、Window の仕組みと使いどころ、ダイアログ系ノードとの関係を紹介します。
Windowとは?
Window は タイトルバー・閉じるボタンを持つ、ドラッグ可能な独立したウィンドウを作るノードです。中に他のControlノードを自由に配置でき、表示・非表示を show() / hide() で切り替えます。
OS のアプリウィンドウをイメージしてください。タイトルバーをドラッグして移動できて、×ボタンで閉じられる——Window はその「小さなアプリウィンドウ」をゲーム画面の中に作り出すノードです。
継承ツリーは Window → Viewport → Node です。Viewport を継承しているため、独立した描画空間を持ちます。AcceptDialog・ConfirmationDialog・FileDialog はすべて Window を継承した派生クラスです。

このノードを使うべき場面
- インベントリウィンドウ:アイテム一覧を別ウィンドウで開き、ゲーム画面と同時に見せたいとき
- フローティングステータス画面:キャラクターのステータスをゲーム画面上に重ねて表示するとき
- マップウィンドウ:ミニマップとは別に大きなマップを独立ウィンドウで表示するとき
- 設定ウィンドウ:ゲームを一時停止せずに設定を変更できるフローティングパネルとして
- カスタムダイアログ:AcceptDialog / ConfirmationDialog では表現できない複雑なダイアログUI
別のノードが適切な場面:
- 「OK」だけで閉じるシンプルな通知 →
AcceptDialog(038)の方が簡単 - 「はい・いいえ」の確認 →
ConfirmationDialog(039)を使う - モーダルなオーバーレイで十分 →
Panel+CanvasLayerで対応できる場合も多い
主なプロパティと機能
| プロパティ / メソッド | 型 | 役割 |
|---|---|---|
title |
String | タイトルバーに表示するテキスト |
size |
Vector2i | ウィンドウのサイズ(ピクセル) |
position |
Vector2i | ウィンドウの表示位置 |
exclusive |
bool | true にするとモーダル動作(他操作をブロック)になる |
unresizable |
bool | true にするとサイズ変更を禁止する |
popup_centered() |
void | 画面中央に表示する(最もよく使う表示メソッド) |
show() / hide() |
void | ウィンドウを表示・非表示にする |
close_requested(シグナル) |
Signal | ×ボタンが押されたときに発火する(自動では閉じない) |
コード例:インベントリウィンドウを開閉する
@onready var inventory_win: Window = $InventoryWindow
func _ready() -> void:
inventory_win.title = "インベントリ"
inventory_win.unresizable = true
# ×ボタンで閉じるには close_requested を手動で接続する
inventory_win.close_requested.connect(inventory_win.hide)
func _input(event: InputEvent) -> void:
if event.is_action_pressed("ui_inventory"): # Iキーなど
if inventory_win.visible:
inventory_win.hide()
else:
inventory_win.popup_centered()
コード例:ウィンドウを画面中央に固定して表示する
func open_window() -> void:
# サイズを設定してから中央表示
inventory_win.size = Vector2i(480, 360)
inventory_win.popup_centered()

もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ・テクニック | 変えると何が起きるか |
|---|---|
exclusive を true に |
ウィンドウが開いている間は背後の操作をブロックするモーダルになる。重要な確認ウィンドウに |
unresizable を true に |
サイズ変更を禁止して固定サイズのウィンドウにできる。UIレイアウトが崩れるのを防ぐ |
popup_centered() を使う |
画面中央に自動配置される。show() より位置合わせが楽 |
close_requested に hide() を接続 |
×ボタンで閉じられるようになる。接続しないと×を押しても何も起きないので必須 |
| Theme で見た目を変える | タイトルバーの色・フォント・ボーダーをゲームのデザインに合わせて変更できる |
まとめ
Window は 「タイトルバー付きのドラッグ可能な独立ウィンドウを作るノード」 です。
close_requestedシグナルにhide()を接続しないと×ボタンで閉じられないので忘れずにpopup_centered()が最も手軽な表示方法- AcceptDialog・ConfirmationDialog・FileDialog はすべて Window の子クラスで、より特化した用途に使う
次回は、メッセージと「OK」ボタンだけのシンプルなダイアログ AcceptDialog を紹介します。
シリーズ:Godot 4 ノード解説
この記事はGodot 4.xをもとに執筆しています。


コメント