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
が思ったとおりに受信できなくて困ってたんだけども、シグナルで対応できる場合もあるんだと気付かされた今日この頃。