はじめに
「本当にデータを削除しますか?」——取り消せない操作の前にプレイヤーに確認を取る場面は、ゲームUIで頻繁に登場します。ConfirmationDialog はそのための「はい・いいえ」ダイアログを数行で実装できるノードです。
この記事では、ConfirmationDialog の仕組みと使いどころ、シグナルの使い分けを紹介します。
ConfirmationDialogとは?
ConfirmationDialog は 「確認(OK)」と「キャンセル」の2つのボタンを持つ確認ダイアログノードです。AcceptDialog を継承しており、キャンセルボタンが追加されただけの違いです。どちらのボタンを押したかを別々のシグナルで受け取れます。
「ファイルを削除しますか? [はい] [いいえ]」——OSのファイル削除確認ダイアログをイメージしてください。ConfirmationDialog はその「二択確認」をゲームUIにそのまま持ち込めるノードです。
継承ツリーは ConfirmationDialog → AcceptDialog → Window → Viewport → Node です。

このノードを使うべき場面
- データ削除の確認:「セーブデータを削除しますか?」など取り消せない操作の前に確認を取るとき
- ゲーム終了の確認:「タイトルに戻りますか?(進行中のデータは失われます)」という警告ダイアログ
- 購入確認:「〇〇を100Gで購入しますか?」のような課金・消費前の確認
- 上書き保存の確認:「既存のセーブデータに上書きしますか?」の二択
別のノードが適切な場面:
- OKだけのシンプルな通知 →
AcceptDialog(038)で十分 - 3択以上の選択肢が必要 →
Window(037)でカスタムダイアログを作る
主なプロパティと機能
| プロパティ / メソッド | 型 | 役割 |
|---|---|---|
dialog_text |
String | 表示するメッセージテキスト(AcceptDialog から継承) |
ok_button_text |
String | 確認ボタンのラベル(デフォルト: “OK”) |
cancel_button_text |
String | キャンセルボタンのラベル(デフォルト: “Cancel”) |
get_cancel_button() |
Button | キャンセルボタンのノードを取得する(スタイル変更などに使う) |
confirmed(シグナル) |
Signal | 確認ボタンが押されたときに発火する |
canceled(シグナル) |
Signal | キャンセルボタンまたは×ボタンが押されたときに発火する |
コード例:セーブデータ削除の確認ダイアログ
@onready var confirm: ConfirmationDialog = $ConfirmationDialog
func _ready() -> void:
confirm.title = "データ削除"
confirm.dialog_text = "セーブデータを削除しますか?\nこの操作は取り消せません。"
confirm.ok_button_text = "削除する"
confirm.cancel_button_text = "キャンセル"
confirm.confirmed.connect(_on_confirmed)
confirm.canceled.connect(_on_canceled)
func on_delete_button_pressed() -> void:
confirm.popup_centered()
func _on_confirmed() -> void:
SaveData.delete()
print("データを削除しました")
func _on_canceled() -> void:
print("削除をキャンセルしました")
コード例:その都度メッセージが変わる汎用確認ダイアログ
@onready var confirm: ConfirmationDialog = $ConfirmationDialog
var _on_yes: Callable # 確認時に実行する処理
func ask(message: String, yes_action: Callable) -> void:
confirm.dialog_text = message
_on_yes = yes_action
confirm.popup_centered()
func _ready() -> void:
confirm.confirmed.connect(func(): _on_yes.call())
# 使用例
# ask("タイトルに戻りますか?", get_tree().change_scene_to_file.bind("res://title.tscn"))

もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ・テクニック | 変えると何が起きるか |
|---|---|
ok_button_text を動詞にする |
「削除する」「購入する」「戻る」など操作内容を明示すると、プレイヤーが迷わない |
cancel_button_text も変える |
「キャンセル」より「続ける」「やめておく」の方が文脈に合う場面が多い |
| Callable を変数に持つ汎用パターン | 1つの ConfirmationDialog を使い回せる。シーンに複数配置する必要がなくなる |
exclusive = true(Window から継承) |
ダイアログ表示中に背後の操作を完全にブロックするモーダルになる |
まとめ
ConfirmationDialog は 「確認・キャンセルの2択ダイアログを素早く作れるノード」 です。
confirmedとcanceledの2つのシグナルで「はい・いいえ」の分岐を管理するok_button_text・cancel_button_textを操作内容に合わせた言葉にすると UX が向上する- Callable を変数に保持する汎用パターンを作ると、1インスタンスで複数の確認に使い回せる
次回は、ファイルを選択・保存できるダイアログ FileDialog を紹介します。
シリーズ:Godot 4 ノード解説
- 001〜035:各種ノード
- 036:PopupMenu
- 037:Window
- 038:AcceptDialog
- 039:ConfirmationDialog(この記事)
- 040:FileDialog
この記事はGodot 4.xをもとに執筆しています。


コメント