Godot入門:Windowの使い方と活用法

はじめに

ゲーム内に独立したウィンドウを作りたい——インベントリを別ウィンドウで開く、キャラクターステータスをフローティングウィンドウで表示する、そんな「ゲーム内ウィンドウ」を実現するのが Window ノードです。

この記事では、Window の仕組みと使いどころ、ダイアログ系ノードとの関係を紹介します。

Windowとは?

Window は タイトルバー・閉じるボタンを持つ、ドラッグ可能な独立したウィンドウを作るノードです。中に他のControlノードを自由に配置でき、表示・非表示を show() / hide() で切り替えます。

OS のアプリウィンドウをイメージしてください。タイトルバーをドラッグして移動できて、×ボタンで閉じられる——Window はその「小さなアプリウィンドウ」をゲーム画面の中に作り出すノードです。

継承ツリーは WindowViewportNode です。Viewport を継承しているため、独立した描画空間を持ちます。AcceptDialogConfirmationDialogFileDialog はすべて Window を継承した派生クラスです。




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()




close_requested シグナルを hide() に接続する
close_requested シグナルを hide() に接続しないと、×ボタンを押しても閉じない点に注意

もっと使いこなす:カスタマイズできるパラメータ

まずは基本を動かしてみてから、余裕が出たら試してみてください。

パラメータ・テクニック 変えると何が起きるか
exclusivetrue ウィンドウが開いている間は背後の操作をブロックするモーダルになる。重要な確認ウィンドウに
unresizabletrue サイズ変更を禁止して固定サイズのウィンドウにできる。UIレイアウトが崩れるのを防ぐ
popup_centered() を使う 画面中央に自動配置される。show() より位置合わせが楽
close_requestedhide() を接続 ×ボタンで閉じられるようになる。接続しないと×を押しても何も起きないので必須
Theme で見た目を変える タイトルバーの色・フォント・ボーダーをゲームのデザインに合わせて変更できる

まとめ

Window は 「タイトルバー付きのドラッグ可能な独立ウィンドウを作るノード」 です。

  • close_requested シグナルに hide() を接続しないと×ボタンで閉じられないので忘れずに
  • popup_centered() が最も手軽な表示方法
  • AcceptDialog・ConfirmationDialog・FileDialog はすべて Window の子クラスで、より特化した用途に使う

次回は、メッセージと「OK」ボタンだけのシンプルなダイアログ AcceptDialog を紹介します。

シリーズ:Godot 4 ノード解説

  • 001〜035:各種ノード
  • 036:PopupMenu
  • 037:Window(この記事)
  • 038:AcceptDialog
  • 039:ConfirmationDialog
  • 040:FileDialog

この記事はGodot 4.xをもとに執筆しています。

コメント