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

Node解説

はじめに

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

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

FileDialogとは?

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

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

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

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

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

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

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

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

主なプロパティと機能

プロパティ / メソッド役割
file_modeenumダイアログの動作モード(OPEN_FILE / OPEN_FILES / OPEN_DIR / SAVE_FILE)
accessenumアクセス範囲(RESOURCES / USERDATA / FILESYSTEM)
filtersPackedStringArray表示するファイルの種類フィルター(例: ["*.png", "*.jpg"]
current_pathStringダイアログが開いているパス
current_fileString入力欄に表示されているファイル名
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 を設定すると、特定の拡張子のファイルだけ表示できる

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

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

パラメータ・テクニック変えると何が起きるか
accessUSERDATAuser:// 以下のみアクセスできる安全なモード。配布ゲームでのファイル保存に適している
accessFILESYSTEMOS全体のファイルシステムにアクセスできる。ゲーム内エディタ・ツール向け
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.xをもとに執筆しています。

コメント