無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、プロジェクトごとの設定を管理するプロジェクト設定に、独自の項目を保存するスクリプト例とその実行結果を紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご利用ください。
プロジェクト設定について
プロジェクト設定の項目は、プロジェクト内のスクリプトから、どこからでもアクセスできます。
プルジェクト設定の項目は、メニュー「プロジェクト」→「プロジェクト設定」で開くプロジェクト設定ダイアログの一般タブで確認・編集できます。
プロジェクト設定の項目は project.godot ファイルに保存されます。
Stores variables that can be accessed from everywhere. Use get_setting(), set_setting() or has_setting() to access them. Variables stored in
project.godotare also loaded into ProjectSettings, making this object very useful for reading custom game configuration options.When naming a Project Settings property, use the full path to the setting including the category. For example,
"application/config/name"for the project name. Category and property names can be viewed in the Project Settings dialog.どこからでもアクセスできる変数を保存します。これらにアクセスするには、get_setting()、set_setting()、または has_setting() を使用します。 project.godot に保存されている変数は ProjectSettings にもロードされるため、このオブジェクトはカスタム ゲーム構成オプションを読み取るのに非常に役立ちます。
プロジェクト設定プロパティに名前を付ける場合は、カテゴリを含む設定への完全なパスを使用します。たとえば、プロジェクト名は「application/config/name」です。カテゴリとプロパティの名前は、[プロジェクト設定]ダイアログで確認できます。
ProjectSettings — Godot Engine (stable) documentation in English と Google 翻訳
プラグインによるツールメニューとサブメニューの追加
独自の項目をプロジェクト設定に保存する処理を実装した関数は、作成したプラグインによって追加したツールメニューのサブメニューを選択することで呼び出されます。
プラグインとツールメニュー・サブメニューの追加の方法については以下の記事を参照してください。
独自の項目を保存する前のプロジェクト設定ダイアログ
下図は、プロジェクト設定に独自の項目を保存する前に、プロジェクト設定ダイアログの一般タブのスクリーンショットです。
※プロジェクト設定ダイアログは、メニュー「プロジェクト」→「プロジェクト設定」で開きます。
保存した独自の項目は、ツリーの一番下に表示されました。
また、右上の「高度な設定」を有効にしないと表示されませんでした。

独自の項目を保存するプラグインのスクリプト例
以下のスクリプトを、以下の記事で作成したプラグインの gd スクリプトに貼り付けて保存します。
上記の記事で紹介している手順で、追加したツールメニューのサブメニューを選択すると、_on_submenu_id_pressed 関数( 57 行目)が呼び出され、サブメニューのどの項目かを id で判別して、対応する関数を呼び出します。
@tool
extends EditorPlugin
## ProjectSettings の「ユーザ名/アドオン名/セクション名/キー」の読み書きを Dictionary 型を用いて行う関数とそのテストです。
## EditorInterface の機能はエディタ上で利用できます。
## ProjectSettings の機能を含む関数を実行するために、プラグインとしてこのスクリプトを追加して
## ツールメニュー(「プロジェクト」→「ツール」)から、これが追加したメニューを選択してください。
## 追加するメニューアイテムの表示名です。
const tool_menu_item_name: StringName = "Study ProjectSettings By Dictionary"
## メニューアイテムに追加するサブメニューアイテムの項目名と ID の配列です。
const tool_submenu_item_info_array = [
{"name": "Save", "id": 0},
{"name": "Set Initial Value", "id": 1},
{"name": "Load", "id": 2},
{"name": "Clear", "id": 3},
]
## サブメニューのリソースです。
var submenu: PopupMenu = null
## テストでアクセスする ProjectSettings の name の要素です。
## テストでは、 EDITOR_SETTINGS_PATH + EDITOR_SETTINGS_SECTION + key を name とします。
const PROJECT_SETTINGS_PATH = "sclib/fit_font_size/"
const PROJECT_SETTINGS_SECTION = "scale_correction_value/"
## プラグインの初期化処理を定義します。
## プラグイン (プロジェクト設定ダイアログ>プラグイン>有効) を有効にした直後や、プラグインが有効な状態のプロジェクトを開いた際に呼び出されます。
func _enter_tree():
if submenu == null:
# サブメニュー用のポップアップメニューに項目名とその ID を追加します。
submenu = PopupMenu.new()
for info in tool_submenu_item_info_array:
submenu.add_item(info.name, info.id)
# 選択されたシグナル発生時に呼び出す関数を設定します。
submenu.id_pressed.connect(_on_submenu_id_pressed)
# ツールメニュー(「プロジェクト」→「ツール」)にメニューアイテムとそのサブメニューを追加します。
add_tool_submenu_item(tool_menu_item_name, submenu)
return
## プラグインの後片付けの処理を定義します。
## プラグインを無効 (プロジェクト設定ダイアログ>プラグイン>有効) にした直後や、プラグインが有効な状態でプロジェクトを閉じた際に呼び出されます。
func _exit_tree():
# ツールメニュー(「プロジェクト」→「ツール」)に追加したメニューアイテムを削除します。
remove_tool_menu_item(tool_menu_item_name)
# サブメニューのリソースを解放します。
if submenu != null:
submenu.queue_free()
submenu = null
return
## プラグインで追加したツールメニューのサブメニューを選択した際に呼び出される関数です。
## [param id] は、選択されたサブメニューの項目の ID です。
func _on_submenu_id_pressed(id):
print("_on_submenu_id_pressed called. id = ", id)
print(tool_submenu_item_info_array[id].name, " pressed.")
# id が指すツールメニューのサブメニューに対応した処理を実行します。
match id:
0: # Save
test_save_editor_settings_section_from_dictionary()
_:
push_warning("id is unknown.")
return
## [method save_project_settings_section_from_dictionary] のテスト関数です。
func test_save_editor_settings_section_from_dictionary():
# セクション内に保存されるデータです。
var dic_save = {}
dic_save["Label"] = 0.9
dic_save["Button"] = 1.0
# 辞書のデータ群を、指定した EditorSettings ファイルのセクションに保存します。
# ファイルが存在しない場合は作成し、存在する場合は辞書の要素ごとに上書きします。
print("save_project_settings_section_from_dictionary call")
save_project_settings_section_from_dictionary(
PROJECT_SETTINGS_PATH, PROJECT_SETTINGS_SECTION, dic_save)
return
## 指定した ProjectSettings の path (例:「ユーザ名/アドオン名」)のセクションに、辞書型のデータを保存します。
## 辞書の要素のキーは、EditorSettings.set_settings の name 引数、値は value 引数に対応します。
##
## [param path] と [param section] を連結した base_path に、
## 辞書の要素キーを付け加えた name に対して value を設定します。
##
## [param path] に "user_name/addon_name/" を指定して、
## [param section] に "section_name/" を設定すると
## ユーザ名、アドオン名、セクション名を / で区切った後にキーを加えた name に value を設定します。
func save_project_settings_section_from_dictionary(
path: String, section: String, dic: Dictionary) -> void:
# 設定を保存する name のキーの1つ前までの階層の文字列を作成します。
var base_path := path + section
# 辞書変数の要素ごとに EditorSettings に保存します。
for key in dic.keys():
# name の最後には、辞書変数のキーを追加します。
var project_settings_name: String = base_path + key
ProjectSettings.set_setting(project_settings_name, dic[key])
return今回は、サブメニュー Save (表示は「保存」)を選択した際に、プロジェクト設定に独自の項目を保存するテスト関数 test_save_editor_settings_section_from_dictionary ( 70 行目)を呼び出します。
そのテスト関数の内部では、辞書変数に指定した項目群をプロジェクト設定に保存する save_project_settings_section_from_dictionary 関数( 94 行目)を呼び出します。
その関数内で、辞書の要素ごとに set_setting 関数を使用( 104 行目)して、独自の項目をプロジェクト設定に保存しています。
void set_setting(name: String, value: Variant)
Sets the value of a setting.
設定値を設定します。
ProjectSettings.set_setting("application/config/name", "Example")This can also be used to erase custom project settings. To do this change the setting value to
null.これは、カスタム プロジェクト設定を消去するためにも使用できます。これを行うには、設定値を null に変更します。
ProjectSettings — Godot Engine (stable) documentation in English #set_setting と Google 翻訳
ツールメニューを選択して、独自の項目を保存する関数を実行
メニュー「プロジェクト」→「ツール」から追加したツールメニュー「Study ProjectSettings By Dictionary」を選択すると、 4 つの項目のサブメニューが表示されるので「保存」を選択します。
※サブメニューの1番目は Save と入力しましたが、日本語メニューに対応させるためか「保存」と表示されています。

プロジェクト設定に独自の項目を保存する関数が実行されました。
_on_submenu_id_pressed called. id = 0
Save pressed.
save_project_settings_section_from_dictionary call独自の項目を保存した後のプロジェクト設定ダイアログの確認
下図は、プロジェクト設定に独自の項目を保存した後に、プロジェクト設定ダイアログの一般タブのスクリーンショットです。
※プロジェクト設定ダイアログは、メニュー「プロジェクト」→「プロジェクト設定」で開きます。
保存した独自の項目は、右上の「高度な設定」を有効にした状態で、ツリーの一番下に ScLib → Fit Font Size として表示されました。
そのページ内には、保存する際に指定した name に含まれる Scale Correction Value セクションとそのあとの Label, Button の項目と値が表示されています。
※なぜか Label は日本語に変わっていますが、別の記事で Label 指定で項目を削除できたので、内部的には Label で保存されています。

プロジェクトフォルダ直下の project.godot ファイルにも記述が追加されました。
[sclib]
fit_font_size/scale_correction_value/Label=0.9
fit_font_size/scale_correction_value/Button=1.0まとめ
- ProjectSettings クラスの set_setting 関数を使用して、プロジェクト設定に独自の項目を保存しました。
- プロジェクト設定ダイアログの一般タブ(高度な設定:有効)で、独自に保存したセクションと項目を確認しました。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- Dictionary — Godot Engine (4.3) documentation in English
- EditorInterface — Godot Engine (4.x)の日本語のドキュメント
- PopupMenu — Godot Engine (4.3) documentation in English
- Project Settings — Godot Engine (stable) documentation in English
- ProjectSettings — Godot Engine (stable) documentation in English
- ProjectSettings — Godot Engine (stable) documentation in English #set_setting
記事一覧 → Compota-Soft-Press

コメント