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

はじめに

「本当にデータを削除しますか?」——取り消せない操作の前にプレイヤーに確認を取る場面は、ゲームUIで頻繁に登場します。ConfirmationDialog はそのための「はい・いいえ」ダイアログを数行で実装できるノードです。

この記事では、ConfirmationDialog の仕組みと使いどころ、シグナルの使い分けを紹介します。

ConfirmationDialogとは?

ConfirmationDialog は 「確認(OK)」と「キャンセル」の2つのボタンを持つ確認ダイアログノードです。AcceptDialog を継承しており、キャンセルボタンが追加されただけの違いです。どちらのボタンを押したかを別々のシグナルで受け取れます。

「ファイルを削除しますか? [はい] [いいえ]」——OSのファイル削除確認ダイアログをイメージしてください。ConfirmationDialog はその「二択確認」をゲームUIにそのまま持ち込めるノードです。

継承ツリーは ConfirmationDialogAcceptDialogWindowViewportNode です。




ConfirmationDialog の表示例(確認メッセージ+2ボタン)
「確認」と「キャンセル」の2択ダイアログ。どちらを押したかをシグナルで受け取る

このノードを使うべき場面

  • データ削除の確認:「セーブデータを削除しますか?」など取り消せない操作の前に確認を取るとき
  • ゲーム終了の確認:「タイトルに戻りますか?(進行中のデータは失われます)」という警告ダイアログ
  • 購入確認:「〇〇を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"))




ゲーム内でConfirmationDialogを使った確認ダイアログの例
ゲームプレイ中に表示する確認ダイアログの定番パターン

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

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

パラメータ・テクニック 変えると何が起きるか
ok_button_text を動詞にする 「削除する」「購入する」「戻る」など操作内容を明示すると、プレイヤーが迷わない
cancel_button_text も変える 「キャンセル」より「続ける」「やめておく」の方が文脈に合う場面が多い
Callable を変数に持つ汎用パターン 1つの ConfirmationDialog を使い回せる。シーンに複数配置する必要がなくなる
exclusive = true(Window から継承) ダイアログ表示中に背後の操作を完全にブロックするモーダルになる

まとめ

ConfirmationDialog は 「確認・キャンセルの2択ダイアログを素早く作れるノード」 です。

  • confirmedcanceled の2つのシグナルで「はい・いいえ」の分岐を管理する
  • ok_button_textcancel_button_text を操作内容に合わせた言葉にすると UX が向上する
  • Callable を変数に保持する汎用パターンを作ると、1インスタンスで複数の確認に使い回せる

次回は、ファイルを選択・保存できるダイアログ FileDialog を紹介します。

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

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

コメント