Godot4 EditorSettingsに追加した設定値の確認と初期値の設定

無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、EditorSettings の機能を用いて、独自追加した設定値エディター設定ダイアログで確認します。
また、その設定値に初期値を指定する関数を定義して、エディター設定ダイアログで、設定値に指定した初期値に戻します

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご利用ください。

前回の記事

前回は、EditorSettings設定されていない値の場合は、既定値を採用する実装を紹介しました。

EditorSettings に追加した設定値の確認

前々回に EditorSettings に独自の設定値を追加しました。

その設定値はエディター設定ダイアログで確認できます。
エディター設定ダイアログは、メニュー「エディタ」→「エディター設定」で開けます。

Godot4 EditorSettingsに追加した設定値の確認と初期値の設定1

一般タブの左側のリストに追加された、独自のセクション選択すると、設定値(例:ラベル、Button)が確認できました。
設定値は、その設定を保存した際の値です。

Godot4 EditorSettingsに追加した設定値の確認と初期値の設定2

設定値に初期値を設定するプラグインのスクリプト

以下のスクリプトは、

  • 辞書型の引数で指定した項目に初期値を設定する関数 set_editor_settings_section_initial_value_from_dictionary と、
  • そのテスト用関数 test_set_editor_settings_section_initial_value_from_dictionary

追加したものです。
※他の処理については前回の記事などを参照してください。

テスト関数で指定した辞書型の引数に指定された以下の初期値が設定されます。

	var dic_initial = {}
	dic_initial["Label"] = 0.98
	dic_initial["Button"] = 0.95

プロジェクト設定ダイアログのプラグインタブで、このスクリプトを実行するプラグインを登録して使用します。

@tool
extends EditorPlugin

## EditorSettings の「ユーザ名/アドオン名/セクション名/キー」の読み書きを Dictionary 型を用いて行う関数とそのテストです。
## EditorInterface の機能はエディタ上で利用できます。
## EditorSettings の機能を含む関数を実行するために、プラグインとしてこのスクリプトを追加して
## ツールメニュー(「プロジェクト」→「ツール」)から、これが追加したメニューを選択してください。
## 
## EditorSettings のファイルは C:\Users\ユーザ名\AppData\Roaming\Godot\editor_settings-4.3.tres にあります。
## 4.3 の部分はバージョンによって変わります。

## メニューアイテムの表示名です。
const tool_menu_item_name: StringName = "Study EditorSettings By Dictionary"

## プラグインの初期化処理を定義します。
## プラグイン (プロジェクト設定ダイアログ>プラグイン>有効) を有効にした直後や、プラグインが有効な状態のプロジェクトを開いた際に呼び出されます。
func _enter_tree():
	# Initialization of the plugin goes here.
	# メニュー「プロジェクト」→「ツール」にサブメニューを追加します。メニュー選択時に、第二引数のメンバ関数を呼び出します。
	add_tool_menu_item(tool_menu_item_name, Callable(self, "_on_menu_item_study_editor_settings_by_dictionary"))
	return


## プラグインの後片付けの処理を定義します。
## プラグインを無効 (プロジェクト設定ダイアログ>プラグイン>有効) にした直後や、プラグインが有効な状態でプロジェクトを閉じた際に呼び出されます。
func _exit_tree():
	# Clean-up of the plugin goes here.
	remove_tool_menu_item(tool_menu_item_name)
	return


## プラグインで追加したツールメニューを選択した際に呼び出される関数です。
func _on_menu_item_study_editor_settings_by_dictionary():
	# EditorSettings に独自の設定値を保存します。
	test_save_editor_settings_section_from_dictionary()
	# 独自の設定値の初期値を設定します。
	test_set_editor_settings_section_initial_value_from_dictionary()
	#test_load_editor_settings_section_to_dictionary()
	return


func test_save_editor_settings_section_from_dictionary():
	# 以下の 2 つを組み合わせて、さらにキー名を追加した name で辞書変数の値にアクセスします。
	const EDITOR_SETTINGS_PATH = "sclib/fit_font_size/"
	const EDITOR_SETTINGS_SECTION = "scale_correction_value/"
	
	# セクション内に保存されるデータです。
	var dic_answer = {}
	dic_answer["Label"] = 0.9
	dic_answer["Button"] = 1.0
	
	# 辞書のデータ群を、指定した EditorSettings ファイルのセクションに保存します。
	# ファイルが存在しない場合は作成し、存在する場合は辞書の要素ごとに上書きします。
	print("save_editor_settings_section_from_dictionary call")
	save_editor_settings_section_from_dictionary(
		EDITOR_SETTINGS_PATH, EDITOR_SETTINGS_SECTION, dic_answer)
	
	return


func test_set_editor_settings_section_initial_value_from_dictionary():
	# 以下の 2 つを組み合わせて、さらにキー名を追加した name で辞書変数の値にアクセスします。
	const EDITOR_SETTINGS_PATH = "sclib/fit_font_size/"
	const EDITOR_SETTINGS_SECTION = "scale_correction_value/"
	
	# セクション内に保存されるデータです。
	var dic_initial = {}
	dic_initial["Label"] = 0.98
	dic_initial["Button"] = 0.95
	
	# 辞書のデータ群を、指定した EditorSettings ファイルのセクションの
	# 各設定値の初期値に設定します。
	print("set_editor_settings_section_initial_value_from_dictionary call")
	set_editor_settings_section_initial_value_from_dictionary(
		EDITOR_SETTINGS_PATH, EDITOR_SETTINGS_SECTION, dic_initial)
	
	return


## load_editor_settings_section_to_dictionary のテスト関数です。
func test_load_editor_settings_section_to_dictionary():
	## 以下の 2 つを組み合わせて、さらにキー名を追加した name で辞書変数の値にアクセスします。
	const EDITOR_SETTINGS_PATH = "sclib/fit_font_size/"
	const EDITOR_SETTINGS_SECTION = "scale_correction_value/"
	
	## セクション内に保存されるデータです。
	var dic_save = {}
	dic_save["Label"] = 0.9
	dic_save["Button"] = 1.0
	
	# 辞書のデータ群を、指定した EditorSettings ファイルのセクションに保存します。
	# ファイルが存在しない場合は作成し、存在する場合は辞書の要素ごとに上書きします。
	print("save_editor_settings_section_from_dictionary call")
	save_editor_settings_section_from_dictionary(
		EDITOR_SETTINGS_PATH, EDITOR_SETTINGS_SECTION, dic_save)
	
	# 取得するキーを設定します。
	var key_array = ["Label", "Button", "OptionButton", "CheckButton"]
	
	# デフォルト値を設定します。
	var initial_values := {}
	initial_values["Label"] = 0.5
	initial_values["OptionButton"] = 0.8
	
	# 例では、 CheckButton はセーブしておらず、デフォルト値も指定しません。
	# OptionButton はセーブしていませんが、デフォルト値を指定しています。
	# Button はセーブしていますが、デフォルト値は指定していません。
	# Label はセーブしていて、デフォルト値も指定しています。
	var dic_answer = {}
	dic_answer["Label"] = 0.9
	dic_answer["Button"] = 1.0
	dic_answer["OptionButton"] = 0.8
	#dic_answer["CheckButton"] は、取得されません。
	
	# 指定した EditorSettings ファイルのセクションを読み込み、辞書として取得します。
	print("load_editor_settings_section_to_dictionary call")
	var dic: Dictionary = load_editor_settings_section_to_dictionary(
		EDITOR_SETTINGS_PATH, EDITOR_SETTINGS_SECTION, key_array, initial_values)
	
	# 保存した辞書の内容と、読み込んだ辞書の内容が等しいことを確認します。
	# 異なる場合は警告を出力します。
	if dic != dic_answer:
		push_warning("study_editor_settings_to_dictionary.gd:" +
			"test_load_sample_dictionary:" +
			"dic != dic_answer")
	
	# デバッグ用。読み込んだ辞書の内容を出力します。
	var str_dic: String = ScUtil.to_pretty_print_string(dic)
	print(str_dic)

	return


## 指定した EditorSettings の path (例:「ユーザ名/アドオン名」)のセクションを辞書型で取得します。
## [param path] と [param section] については [method save_editor_settings_section_from_dictionary] を
## 参照してください。
func load_editor_settings_section_to_dictionary(
	path: String, section: String, key_array: Array, default_values: Dictionary = {}
) -> Dictionary:
	var dic := {}
	
	# 設定を保存する name のキーの1つ前までの階層の文字列を作成します。
	var base_path := path + section
	
	# EditorSettings から key_array に指定したキーを base_path に加えた各 name の値を
	# 戻り値の辞書のキーの値として取得します。
	var editor_settings = EditorInterface.get_editor_settings()
	if editor_settings == null:
		push_error("study_eidotr_settings_by_dictionary.gd:" +
			"load_editor_settings_section_to_dictionary:" +
			"editor_settings == null")
		return dic
	
	var default_keys = default_values.keys()
	# 辞書変数の要素ごとに EditorSettings から値を取得します。
	for key in key_array:
		# name の最後には、辞書変数のキーを追加します。
		var editor_settings_name: String = base_path + key
		
		# 本関数内でデフォルト値を設定していない、かつ、name の設定が存在しない場合は警告を出力します。
		# それ以外は、辞書変数に設定値を格納します。
		if editor_settings.has_setting(editor_settings_name) == false:
			if key in default_keys:
				dic[key] = default_values[key]
			else:
				push_warning("study_eidotr_settings_by_dictionary.gd:" +
					"load_editor_settings_section_to_dictionary:" +
					"editor_settings.has_setting(editr_settings_name) == false, " +
					"editor_settings_name = ", editor_settings_name)
		else:
			dic[key] = editor_settings.get_setting(editor_settings_name)
	
	return dic


## 指定した EditorSettings の 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_editor_settings_section_from_dictionary(
	path: String, section: String, dic: Dictionary) -> void:
	
	# 設定を保存する name のキーの1つ前までの階層の文字列を作成します。
	var base_path := path + section
	
	# EditorSettings に dic の各要素を保存します。
	var editor_settings = EditorInterface.get_editor_settings()
	if editor_settings == null:
		push_error("study_eidotr_settings_by_dictionary.gd:" +
			"save_editor_settings_section_from_dictionary:" +
			"editor_settings == null")
		return
	
	# 辞書変数の要素ごとに EditorSettings に保存します。
	for key in dic.keys():
		# name の最後には、辞書変数のキーを追加します。
		var editor_settings_name: String = base_path + key
		editor_settings.set_setting(editor_settings_name, dic[key])
	
	return


## EditorSettings の項目の初期値を指定します。
## これは EditorSettings の Revert ボタンが押されたときなどに用いられます。
## これを指定しても、設定自体がない場合に get_setting を行うとエラーになります。
func set_editor_settings_section_initial_value_from_dictionary(
	path: String, section: String, initial_values: Dictionary = {}
) -> void:
	
	# 設定を保存する name のキーの1つ前までの階層の文字列を作成します。
	var base_path := path + section
	
	# EditorSettings から key_array に指定したキーを base_path に加えた各 name の値を
	# 戻り値の辞書のキーの値として取得します。
	var editor_settings = EditorInterface.get_editor_settings()
	if editor_settings == null:
		push_error("study_eidotr_settings_by_dictionary.gd:" +
			"set_editor_settings_section_initial_value:" +
			"editor_settings == null")
		return
	
	# 辞書変数の要素ごとに EditorSettings から値を取得します。
	for key in initial_values.keys():
		# name の最後には、辞書変数のキーを追加します。
		var editor_settings_name: String = base_path + key
		print("set_initial_values, editor_settings_name = ", editor_settings_name)
		# 初期値を設定します。設定値がある場合は変更しません(第3引数)。
		editor_settings.set_initial_value(editor_settings_name, initial_values[key], false)
	
	return

スクリプトの処理の流れ

スクリプトの最後に定義している set_editor_settings_section_initial_value_from_dictionary 関数内で EditorSettingsset_initial_value 関数を呼び出して、指定した設定値の初期値を設定しています。

void set_initial_value(name: StringName, value: Variant, update_current: bool

Sets the initial value of the setting specified by name to value. This is used to provide a value for the Revert button in the Editor Settings. If update_current is true, the current value of the setting will be set to value as well.

名前で指定された設定の初期値を値に設定します。これは、エディタ設定の [元に戻す] ボタンの値を提供するために使用されます。 update_current が true の場合、設定の現在の値も value に設定されます。

EditorSettings — Godot Engine (4.3) documentation in English #set-initial-value と Google 翻訳

その関数は、_enter_tree イベント関数(プラグインの初期化)で追加されたツールメニュー(メニュー「プロジェクト」→「ツール」以降)から呼び出されます。

  1. ツールメニューに追加した「Study EditorSettings By Dictionary」を選択すると
  2. _on_menu_item_study_editor_settings_by_dictionary 関数が呼び出され、
  3. その中で、独自の設定値を追加する test_save_editor_settings_section_from_dictionary 関数が呼び出され、
  4. その中で、初期値を設定する test_set_editor_settings_section_initial_value_from_dictionary 関数が呼び出されます。

ツールメニューから初期値を設定する関数を実行

プラグインで追加したツールメニューを選択して、初期値を設定する処理を実行します。
※前述のスクリプトか追加したツールメニューはメニュー「プロジェクト」→「ツール」→「Study EditorSettings By Dictionary」です。

Godot4 EditorSettingsに追加した設定値の確認と初期値の設定3

出力ボトムパネルに、set_editor_settings_section_initial_value_from_dictionary 関数で初期値を設定した項目のパスが表示されました。

save_editor_settings_section_from_dictionary call
set_editor_settings_section_initial_value_from_dictionary call
set_initial_values, editor_settings_name = sclib/fit_font_size/scale_correction_value/Label
set_initial_values, editor_settings_name = sclib/fit_font_size/scale_correction_value/Button

テスト関数で指定した辞書型の引数に指定された以下の初期値が設定されました。

	var dic_initial = {}
	dic_initial["Label"] = 0.98
	dic_initial["Button"] = 0.95

初期値をエディター設定ダイアログで確認

設定した初期値がエディター設定ダイアログに反映されていることを確認します。

エディター設定ダイアログで、独自に追加したセクションを選択すると、設定値の部分に戻すアイコンのボタンが表示されています。
※エディター設定ダイアログは、メニュー「エディター」→「エディター設定」で開きます。

Godot4 EditorSettingsに追加した設定値の確認と初期値の設定4

戻すアイコンのボタンを押すと、設定値が初期値に変更されました。

Godot4 EditorSettingsに追加した設定値の確認と初期値の設定5
scale_correction_value/Label を設定
scale_correction_value/Button を設定

まとめ

  • EditorSettings に、独自追加した設定値を、エディター設定ダイアログで確認しました。
  • 設定値に初期値を指定した後で、エディター設定ダイアログの戻すアイコンのボタンで、設定値に指定した初期値に戻しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました