はじめに
ゲーム内エディタやツールを作るとき、「ファイルを開く」「名前を付けて保存」のダイアログが欲しくなることがあります。FileDialog を使えば、OS標準のファイルブラウザに近い見た目のダイアログをGodot内に実装できます。
この記事では、FileDialog の仕組みと使いどころ、ファイルの取得方法を紹介します。
FileDialogとは?
FileDialog は ファイルやフォルダを選択・保存するためのダイアログノードです。ファイルツリー・フィルター・パス入力欄が組み込まれており、ユーザーがファイルを選択すると選択パスをシグナルで通知します。
「名前を付けて保存」ダイアログをイメージしてください。フォルダを移動して目的のファイルを選び、OKを押すとパスが返ってくる——FileDialog はその仕組みをGodotゲーム内で再現します。
継承ツリーは FileDialog → AcceptDialog → Window → Viewport → Node です。AcceptDialog を継承しており、OKボタンとキャンセルボタンが標準で備わっています。

このノードを使うべき場面
- ゲーム内エディタのファイル操作:レベルエディタ・スプライトエディタで「開く・保存」を実装するとき
- カスタムマップ・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)

もっと使いこなす:カスタマイズできるパラメータ
まずは基本を動かしてみてから、余裕が出たら試してみてください。
| パラメータ・テクニック | 変えると何が起きるか |
|---|---|
access を USERDATA に |
user:// 以下のみアクセスできる安全なモード。配布ゲームでのファイル保存に適している |
access を FILESYSTEM に |
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 ノード解説
- 001〜035:各種ノード
- 036:PopupMenu
- 037:Window
- 038:AcceptDialog
- 039:ConfirmationDialog
- 040:FileDialog(この記事)
- 041:StaticBody2D
- 042:TileMap
この記事はGodot 4.xをもとに執筆しています。


コメント