Godot4でウィンドウのサイズ変更を検知したい!
概要
今回の記事では、Godot4でウィンドウのサイズ変更を検知する手順を掲載する。
Node.NOTIFICATION_WM_SIZE_CHANGEDがそれっぽいんだけどもなんか違うみたい。
仕様書
環境
- Gogot 4.2.1
手順書
User Interfaceのシーン限定のやり方になるんだけども、resizeのシグナルを受診することでウィンドウのサイズが変更されたのを検知できる。
ウィンドウのサイズが変更されたのを検知されたタイミングで、子のColorRectをウィンドウのサイズに合わせてフィットさせるサンプル。
- シーンはこんな感じ。ルートの
Controlにはスクリプトをアタッチしておく。

- Sceneの中の
Controlを選択した状態で、Node -> Signals -> Control ->resize()をダブル左クリックする。

- シグナルの設定をするダイアログが表示される。ルートの
Controlが設定されてることを確認してConnectを左クリックする。

- 赤枠のような感じになってれば、シグナルが設定される。

resizeのシグナルに接続した関数_on_resizedにウィンドウのサイズ、Control(ビューポート)のサイズをOUTPUTへ出力して、子のColorRectをフィットさせるコードを入力する。extends Control
@onready var colorRect = $ColorRect
func _on_resized():
ウィンドウのサイズを取得してOUTPUTへ出力する
var ws:Vector2i = DisplayServer.window_get_size()
print("DisplayServer x: %d, y; %d" % [ws.x, ws.y])
# Control(ビューポート)のサイズをOUTPUTへ出力する
print("Control w: %d, h; %d" % [size.x, size.y])
# Control(ビューポート)のサイズに合わせて、子のColorRectのサイズをフィットさせる
# シーンの作成時にもこのシグナルが発火するんだけども、そのタイミングではColorRectが読み込まれておらずnullなことに注意
if (colorRect != null):
colorRect.size = Vector2(size.x, size.y)
## まとめ(感想文)
Node.NOTIFICATION_WM_SIZE_CHANGEDが思ったとおりに受信できなくて困ってたんだけども、シグナルで対応できる場合もあるんだと気付かされた今日この頃。
