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

はじめに

ゲーム内エディタやツールを作るとき、「ファイルを開く」「名前を付けて保存」のダイアログが欲しくなることがあります。FileDialog を使えば、OS標準のファイルブラウザに近い見た目のダイアログをGodot内に実装できます。

この記事では、FileDialog の仕組みと使いどころ、ファイルの取得方法を紹介します。

FileDialogとは?

FileDialog は ファイルやフォルダを選択・保存するためのダイアログノードです。ファイルツリー・フィルター・パス入力欄が組み込まれており、ユーザーがファイルを選択すると選択パスをシグナルで通知します。

「名前を付けて保存」ダイアログをイメージしてください。フォルダを移動して目的のファイルを選び、OKを押すとパスが返ってくる——FileDialog はその仕組みをGodotゲーム内で再現します。

継承ツリーは FileDialogAcceptDialogWindowViewportNode です。AcceptDialog を継承しており、OKボタンとキャンセルボタンが標準で備わっています。




FileDialog の全体像(ファイルツリー・一覧・フィルター)
ディレクトリ移動・ファイル選択・フィルターが標準で備わっている

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

  • ゲーム内エディタのファイル操作:レベルエディタ・スプライトエディタで「開く・保存」を実装するとき
  • カスタムマップ・MODの読み込み:ユーザーが作ったファイルをゲームに取り込むとき
  • スクリーンショットの保存先指定:撮影した画像の保存先フォルダをユーザーに選ばせるとき
  • 設定ファイルのインポート・エクスポート:設定をファイルで共有・バックアップする機能

別のノードが適切な場面:

  • ファイル選択ではなく単純な確認ダイアログ → ConfirmationDialog(039)を使う
  • ゲーム内リソースへのアクセスのみ → load()ResourceLoader で直接読み込む方がシンプル

主なプロパティと機能

プロパティ / メソッド 役割
file_mode enum ダイアログの動作モード(OPEN_FILE / OPEN_FILES / OPEN_DIR / SAVE_FILE)
access enum アクセス範囲(RESOURCES / USERDATA / FILESYSTEM)
filters PackedStringArray 表示するファイルの種類フィルター(例: ["*.png", "*.jpg"]
current_path String ダイアログが開いているパス
current_file String 入力欄に表示されているファイル名
file_selected(シグナル) Signal ファイルが選択されたとき、そのパスを引数として発火する
files_selected(シグナル) Signal 複数ファイルが選択されたとき、パスの配列を引数として発火する
dir_selected(シグナル) Signal フォルダが選択されたとき、そのパスを引数として発火する

file_mode の種類と用途をまとめました。

file_mode 動作 向いている場面
OPEN_FILE 既存ファイルを1つ選択 ファイルを開く(デフォルト)
OPEN_FILES 既存ファイルを複数選択 まとめて読み込みたいとき
OPEN_DIR フォルダを選択 保存先ディレクトリを指定させたいとき
SAVE_FILE 保存するファイル名を指定 「名前を付けて保存」ダイアログ

コード例:PNG画像ファイルを開くダイアログ

@onready var file_dialog: FileDialog = $FileDialog

func _ready() -> void:
    file_dialog.file_mode = FileDialog.FILE_MODE_OPEN_FILE
    file_dialog.access    = FileDialog.ACCESS_FILESYSTEM
    file_dialog.filters   = ["*.png, *.jpg ; 画像ファイル"]
    file_dialog.file_selected.connect(_on_file_selected)

func on_open_button_pressed() -> void:
    file_dialog.popup_centered_ratio(0.7)  # 画面の70%サイズで表示

func _on_file_selected(path: String) -> void:
    var texture := ImageTexture.create_from_image(Image.load_from_file(path))
    $Sprite2D.texture = texture
    print("読み込んだファイル:", path)

コード例:名前を付けて保存するダイアログ

func open_save_dialog() -> void:
    file_dialog.file_mode    = FileDialog.FILE_MODE_SAVE_FILE
    file_dialog.access       = FileDialog.ACCESS_USERDATA
    file_dialog.filters      = ["*.json ; JSONファイル"]
    file_dialog.current_file = "mydata.json"
    file_dialog.file_selected.connect(_on_save_path_selected, CONNECT_ONE_SHOT)
    file_dialog.popup_centered_ratio(0.7)

func _on_save_path_selected(path: String) -> void:
    var file := FileAccess.open(path, FileAccess.WRITE)
    file.store_string(JSON.stringify(save_data))
    file.close()
    print("保存完了:", path)




filters で表示ファイルを画像のみに絞った FileDialog
filters を設定すると、特定の拡張子のファイルだけ表示できる

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

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

パラメータ・テクニック 変えると何が起きるか
accessUSERDATA user:// 以下のみアクセスできる安全なモード。配布ゲームでのファイル保存に適している
accessFILESYSTEM OS全体のファイルシステムにアクセスできる。ゲーム内エディタ・ツール向け
filters に複数フォーマットを指定 ["*.png, *.jpg, *.webp ; 画像ファイル"] のように複数拡張子をまとめられる
popup_centered_ratio(0.7) を使う 画面サイズに対する比率でダイアログサイズが決まる。解像度違いへの対応が楽
CONNECT_ONE_SHOT でシグナル接続 シグナルが1回発火したら自動的に切断される。ダイアログを使い回すときの二重接続を防げる

まとめ

FileDialog は 「ファイル選択・保存ダイアログをGodot内に実装するノード」 です。

  • file_mode で「開く・保存・フォルダ選択」の動作を切り替える
  • filters で特定の拡張子のみ表示でき、誤ったファイル選択を防げる
  • 配布ゲームでは access = USERDATA、開発ツールでは FILESYSTEM が基本の使い分け

次回は、ノードに2D物理コリジョンを付ける StaticBody2D を紹介します。

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

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

コメント