無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、シグナルの情報を取得する Object クラスのメンバ関数 get_signal_list の戻り値などで用いられる Array[Dictionary] 型のデータにアクセスする、指定したキーの値と、指定したキーと値を持つ Dictionary 要素を、全て取得する2つの関数とテストコードの例を紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。
シグナルの情報の取得などで利用される Array[Dictionary]
シグナルの情報を取得する Object クラスのメンバ関数 get_signal_list などは、Array[Dictionary] 型のデータを返します。
# C++ の構造体の配列のようなものや、 Perl の連想配列の配列のようなイメージを持ちました。
以下は、ゲームの2体のキャラクターのデータを、辞書の配列で表した例です。
最初に配列があり、その中にキャラクターごとの辞書(例では piyo と fuga という名前のキャラクターのデータ)が複数あります。
キャラクターごとに持っているスキルは skills というキーの値に設定されています。
この skills の値も Array[Dictionary] 型になっています。
このように、辞書の要素の値の中に再び Array[Dictionary] 型が出てくることもあり、Array[Dictionary] 型はよく使われるデータ型と言えるかもしれません。
[
{
"name": "piyo",
"level": 99
"skills":
[
{
"name": "Fire Magic",
"type": "Attack"
"value": 30
},
{
"name": "Heal Magic",
"type": "Heal"
"value": 30
}
]
},
{
"name": "fuga",
"level": 39
"skills":
[
]
}
]
例えば、 get_signal_list の戻り値の Array の中に複数ある Dictionary は1つずつシグナルの情報を持ちます。
Array[Dictionary] get_signal_connection_list(signal: StringName) const 🔗
Returns an Array of connections for the given
signal
name. Each connection is represented as a Dictionary that contains three entries:
signal
is a reference to the Signal;callable
is a reference to the connected Callable;flags
is a combination of ConnectFlags.
Array[Dictionary] get_signal_list() const
Returns the list of existing signals as an Array of dictionaries.
Note: Due of the implementation, each Dictionary is formatted very similarly to the returned values of get_method_list.
Object — Godot Engine (4.x)の日本語のドキュメント #get_signal_list とその上に記述された get_signal_connection_list
Array[Dictionary] 型にアクセスする2つの自作関数
以下は、上記のような Array[Dictionary] 型のデータにアクセスする際に用いた以下の機能を関数にしたものです。
- 配列の中で、各辞書の特定のキーの値を全て得る関数
- 配列の中で、指定したキーと値を持つ辞書を全て得る関数
## 辞書型の要素を持つ配列 [param array_dictionary] から、指定したキーの値を抽出して、配列 [param dest_array] に追加します。
## 指定したキーがない場合は何もしません。
static func get_array_dictionary_specified_key_values(array_dictionary: Array[Dictionary], key: StringName, dest_array: Array) -> void:
for dictionary: Dictionary in array_dictionary:
if dictionary.has(key) == true:
dest_array.append(dictionary.get(key))
return
## 辞書型の要素を持つ配列 [param array_dictionary] で、指定したキーと値を持つ辞書を抽出して、配列 [param dest_array] に追加します。
static func get_array_dictionary_matched_dictionary(array_dictionary: Array[Dictionary], key: StringName, value, dest_array: Array):
for dictionary in array_dictionary:
if dictionary.has(key) == true:
var _value = dictionary.get(key)
if _value != null and _value == value:
dest_array.append(dictionary)
return
dictionary.has 関数は、辞書の中に指定したキーがあるかを確認します。
dictionary.get 関数は、指定したキーの値を辞書から取得します。
配列の append 関数は、第1引数を配列に追加します。
テストコード
以下は、その2つの関数のテストコードです。
Array[Dictionary] 型のサンプルを作り、関数が期待したデータ群を収集するかを確認しています。
func test_get_array_dictionary_specified_key_values_1():
var array_dictionary: Array[Dictionary] = [{"name": "piyo", "level": 99}, {"name": "fuga", "level": 39}]
var names: Array[String] = []
ScUtil.get_array_dictionary_specified_key_values(array_dictionary, "name", names)
assert_eq(names.size(), 2)
assert_eq(names.has("piyo"), true)
assert_eq(names.has("fuga"), true)
assert_eq(names.has("hoge"), false)
return
func test_get_array_dictionary_matched_dictionary_1():
var array_dictionary: Array[Dictionary] = [{"name": "piyo", "level": 99}, {"name": "fuga", "level": 39}]
var matched_dictionarys: Array[Dictionary] = []
ScUtil.get_array_dictionary_matched_dictionary(array_dictionary, "name", "piyo", matched_dictionarys)
assert_eq(matched_dictionarys.size(), 1)
assert_eq(matched_dictionarys[0]["name"], "piyo")
assert_eq(matched_dictionarys[0]["level"], 99)
return
テスト
先ほど作った2つの単体テストの関数を含むスクリプトを GUT で実行し、自作関数が期待したとおりに動作するかテストを行います。
GUT による単体テストの実行方法については、以下の記事を参照してください。
GUT ボトムパネルを選択して、左上の Run All ボタンを押して、テストコードを全て実行します。
![Godot4 Array[Dictionary] にアクセスする2関数の単体テスト1](https://compota-soft.work/wp1/wp-content/uploads/2025/03/Godot4-ArrayDictionary-にアクセスする2関数の単体テスト1.png)
結果として、作成したテスト関数も実行され、全てのテスト関数が合格しました。
![Godot4 Array[Dictionary] にアクセスする2関数の単体テスト2](https://compota-soft.work/wp1/wp-content/uploads/2025/03/Godot4-ArrayDictionary-にアクセスする2関数の単体テスト2.png)
まとめ
今回は、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 で、シグナルの情報を取得する Object クラスのメンバ関数 get_signal_list の戻り値などで用いられる Array[Dictionary] 型のデータにアクセスする、指定したキーの値と、指定したキーと値を持つ Dictionary 要素を、全て取得する2つの関数とテストコードの例を紹介しました。
参照サイト Thank You!
- Godot Engine – Free and open source 2D and 3D game engine
- Object — Godot Engine (4.x)の日本語のドキュメント #get_signal_list
- Array — Godot Engine (4.x)の日本語のドキュメント
- Array — Godot Engine (4.x)の日本語のドキュメント #append
- Dictionary — Godot Engine (4.x)の日本語のドキュメント
- Dictionary — Godot Engine (4.x)の日本語のドキュメント #has
- Dictionary — Godot Engine (4.x)の日本語のドキュメント #get
記事一覧 → Compota-Soft-Press
コメント