以下は、GDScript から ACTION GAME MAKER のクラスにアクセスするために使用される API のリストです。
これらはすべて ClassDB に登録されているため、記載されている通りに GDScript から呼び出すことができます。ここにリストされていないものは内部実装であり、公開 API の一部ではありません。
オブジェクト変数/スイッチおよびプロジェクト変数/スイッチ API
オブジェクト変数へのアクセス (VariableSettings ノード)
| 目的 | 呼び出し |
|---|---|
| 変数データを取得 | $VariableSettings.get_value("VariableName") |
| 変数データを設定 | $VariableSettings.set_value("VariableName", value) |
| 変更シグナルを発行せずに設定 | $VariableSettings.set_value("VariableName", value, false) |
| 変数が存在するか確認 | $VariableSettings.has_value("VariableName") |
| VariableSettings ノードを取得 | game_object.get_variable_settings() |
set_value の第3引数 (is_emit_changed_signal) はデフォルトで true です。毎フレーム値を書き込み、毎回変更通知を発行したくない場合は false を渡してください。
シグナル: apply_value(variable_name: String, value) — 値が適用されたときに発行されます。
オブジェクトスイッチへのアクセス (SwitchSettings ノード)
| 目的 | 呼び出し |
|---|---|
| スイッチデータを取得 | $SwitchSettings.get_value("SwitchName") |
| スイッチデータを設定 | $SwitchSettings.set_value("SwitchName", true) |
| スイッチが存在するか確認 | $SwitchSettings.has_value("SwitchName") |
| SwitchSettings ノードを取得 | game_object.get_switch_settings() |
シグナル: apply_value(switch_name: String, value: bool)
読み取り専用のオブジェクト変数/スイッチ
以下の組み込み変数/スイッチは読み取り専用であり、これらのメソッドを通じて変更することはできません。
スイッチ:
is_locked, is_touching_portal
変数:
object_id, stayed_area_id, visible_direction, x_speed, y_speed, player_id, controller_id, taken_damage
プロジェクト変数へのアクセス
| 目的 | 呼び出し |
|---|---|
| レコード名で取得 | AGMakerManager.get_project_database_variable("record_name") |
| レコードインデックスで取得 | AGMakerManager.get_project_database_variable_by_idx(record_idx) |
| レコード名で設定 | AGMakerManager.update_project_database_variable("record_name", value) |
| レコードインデックスで設定 | AGMakerManager.update_project_database_variable_by_idx(record_idx, value) |
| レコード数を取得 | AGMakerManager.get_project_database_variable_record_max() |
プロジェクトスイッチへのアクセス
| 目的 | 呼び出し |
|---|---|
| レコード名で取得 | AGMakerManager.get_project_database_switch("record_name") |
| レコードインデックスで取得 | AGMakerManager.get_project_database_switch_by_idx(record_idx) |
| レコード名で設定 | AGMakerManager.update_project_database_switch("record_name", true) |
| レコードインデックスで設定 | AGMakerManager.update_project_database_switch_by_idx(record_idx, true) |
| レコード数を取得 | AGMakerManager.get_project_database_switch_record_max() |
シグナル (AGMakerManager):
notify_database_variable_value_changed(record_name: String, value: float)
notify_database_switch_value_changed(record_name: String, value: float)
データベース API
ユーザーデータベースへのアクセス
| 目的 | 呼び出し |
|---|---|
| 取得 | AGMakerManager.get_project_database_plain("section_name", "record_name", "column_name") |
| レコードインデックスで取得 | AGMakerManager.get_project_database_plain_by_idx("section_name", record_idx, "column_name") |
| 設定 | AGMakerManager.update_project_database_plain("section_name", "record_name", "column_name", value) |
| レコードインデックスで設定 | AGMakerManager.update_project_database_plain_by_idx("section_name", record_idx, "column_name", value) |
| レコード数を取得 | AGMakerManager.get_project_database_plain_record_max("section_name") |
第1引数はファイル名ではなく、セクション名(ユーザーデータベースの名前)です。
オブジェクトとしてユーザーデータベースにアクセス (AgmUserDatabase / AgmUserDatabaseRecord)
毎回の呼び出しでセクション、レコード、カラム名を渡す代わりに、ユーザーデータベースをオブジェクトとして取得し、レコードを直接操作することができます。名前の検索はハッシュテーブルを通じて行われるため、レコード数が多くても高速に動作します。
ユーザーデータベースの取得 (AGMakerManager)
| 目的 | 呼び出し |
|---|---|
| すべてのユーザーデータベースを取得 | AGMakerManager.get_user_databases() |
| ユーザーデータベースが存在するか確認 | AGMakerManager.has_user_database("database_name") |
| ユーザーデータベースを取得 | AGMakerManager.get_user_database("database_name") |
- 引数はユーザーデータベースの名前(上記のセクション名と同じ)です。
get_user_databaseは、その名前のユーザーデータベースが存在しない場合nullを返します。get_user_databases()の順序は保証されません。- ユーザーデータベースはゲーム実行中のみ利用可能です。エディター内(例えば
@toolスクリプトから)では、get_user_databaseはnullを返します。
AgmUserDatabase
| 目的 | 呼び出し |
|---|---|
| ユーザーデータベースの名前 | database.get_name() |
| すべてのレコードを取得 | database.get_records() |
| レコードが存在するか確認 | database.has_record("record_name") |
| レコードを取得 | database.get_record("record_name") |
| プレイ中に値を変更できるか | database.is_changeable() |
| 値がセーブデータに保存されるか | database.is_savable() |
get_records()は、データベースエディターで定義された順序でレコードを返します。get_recordは、その名前のレコードが存在しない場合nullを返します。
AgmUserDatabaseRecord
| 目的 | 呼び出し |
|---|---|
| レコードの名前 | record.get_name() |
| すべてのカラム名を取得 | record.get_column_names() |
| カラムが存在するか確認 | record.has_column("column_name") |
| カラムの値を取得 | record.get_column_value("column_name") |
| カラムの値を設定 | record.set_column_value("column_name", value) |
| このレコードが属するユーザーデータベース | record.get_user_database() |
get_column_names()は、データベースエディターで定義された順序でカラムを返します。get_column_valueは、その名前のカラムが存在しない場合nullを返します。set_column_valueは成功時にtrueを返します。カラムが存在しない場合、またはユーザーデータベースが変更不可能な場合 (is_changeable()がfalse) は、何も変更せずにfalseを返します。set_column_valueは、データベースエディターで設定されたカラム型に対して値の型をチェックしません。正しい型の値を渡してください。- ここで読み書きされる値は、
get_project_database_plain/update_project_database_plainおよびビジュアルスクリプトが使用する値と同じです。ユーザーデータベースがセーブ可能な場合、変更はセーブデータに保存されます。 - いずれのクラスも
new()で作成することはできません。必ずAGMakerManager経由で取得してください。
サンプルコード:
func _ready() -> void:
var items := AGMakerManager.get_user_database("Items")
if items == null:
return
# すべてのレコードとそのカラムをリスト表示
for record in items.get_records():
for column in record.get_column_names():
print(record.get_name(), ".", column, " = ", record.get_column_value(column))
# 1つの値を変更
var potion := items.get_record("Potion")
if potion != null and potion.has_column("Price"):
if not potion.set_column_value("Price", 120):
print("Items cannot be changed during play")
その他のデータベースへのアクセス
レコード名で取得
| データベース | 呼び出し |
|---|---|
| 装備タイプ | AGMakerManager.get_project_database_equipment_type("record_name") |
| 属性タイプ | AGMakerManager.get_project_database_attribute_type("record_name") |
| ユーザー定義タイプ | AGMakerManager.get_project_database_custom_type("section_name", "record_name") |
| オーディオデータベース | AGMakerManager.get_project_database_sound("record_name", "column_name") |
レコードインデックスで取得
| データベース | 呼び出し |
|---|---|
| 装備タイプ | AGMakerManager.get_project_database_equipment_type_by_idx(record_idx) |
| 属性タイプ | AGMakerManager.get_project_database_attribute_type_by_idx(record_idx) |
| ユーザー定義タイプ | AGMakerManager.get_project_database_custom_type_by_idx("section_name", record_idx) |
| オーディオデータベース | AGMakerManager.get_project_database_sound_by_idx(record_idx, "column_name") |
レコード数の取得
| データベース | 呼び出し |
|---|---|
| 装備タイプ | AGMakerManager.get_project_database_equipment_type_record_max() |
| 属性タイプ | AGMakerManager.get_project_database_attribute_type_record_max() |
| ユーザー定義タイプ | AGMakerManager.get_project_database_custom_type_record_max("section_name") |
| オーディオデータベース | AGMakerManager.get_project_database_sound_record_max() |
共有ボード (Blackboard) API
キーは、[変数/スイッチの設定] ウィンドウの [Blackboard] タブで事前に定義する必要があります。これらのメソッドはそのキーの読み書きを行います。
| 目的 | 呼び出し |
|---|---|
| キーが存在するか確認 | AGMakerManager.has_blackboard_key("KeyName") |
| 共有値を取得 | AGMakerManager.get_blackboard_value("KeyName", default_value) |
| 共有値を設定 | AGMakerManager.set_blackboard_value("KeyName", value) |
| すべての値を初期値にリセット | AGMakerManager.reset_blackboard_values() |
| オブジェクトごとの値を取得 | AGMakerManager.get_object_blackboard_value(instance_id, "KeyName", default_value) |
| オブジェクトごとの値を設定 | AGMakerManager.set_object_blackboard_value(instance_id, "KeyName", value) |
default_value は省略可能で、デフォルトは null です。
スコープが [Per Object] のキーには、..._object_blackboard_value ペアを使用し、対象オブジェクトの get_instance_id() を渡してください。
サンプルコード:
func _ready() -> void:
if AGMakerManager.has_blackboard_key("BossDefeated"):
AGMakerManager.set_blackboard_value("BossDefeated", true)
# オブジェクトごとのキー
AGMakerManager.set_object_blackboard_value(get_instance_id(), "MyTarget", null)
セーブ/ロードおよびクイックリスタート API
| 目的 | 呼び出し |
|---|---|
| スロットにセーブ | AGMakerManager.save_game_data(slot_idx, owner) |
| スロットからロード | AGMakerManager.load_game_data(slot_idx, include_project_variable, include_project_switch, include_saved_scene, include_object_status, include_layer_active_state, transition_type, transition_duration) |
| オートセーブにセーブ | AGMakerManager.save_auto_game_data(owner) |
| オートセーブをロード | AGMakerManager.load_auto_game_data(include_project_variable, include_project_switch, include_saved_scene, include_object_status, include_layer_active_state, transition_type, transition_duration) |
| オートセーブが存在するか確認 | AGMakerManager.exists_auto_game_data() |
| オートセーブを削除 | AGMakerManager.delete_auto_game_data() |
| クイックリスタート | AGMakerManager.quick_restart(restart_type, bgm_type, self_state_type, clear_flags, transition_type, transition_duration, restart_layer, restart_action, owner) |
slot_idxは 0 から始まります。ownerは操作を実行するオブジェクトです(ゲームオブジェクト上のノードからはselfを渡します)。transition_typeは、シーン遷移の画面効果と同じ値を取ります (0 = NONE,1 = BLACK,2 = WHITE、その後スライド系バリエーション)。quick_restartの引数は「QuickRestart」アクションの設定に一致します:restart_type:0= シーン全体をオートセーブポイントまで巻き戻す,1= シーンを保持し自分自身のみをオートセーブポイントに戻す,2= シーンを保持し、最後に立っていた地面に戻す。bgm_type:0= 保存時と同じ BGM ならそれを保持,1= 常にセーブされた BGM を最初から再起動。self_state_type:restart_typeが1または2の場合にのみ使用されます。0= 自身の状態(HP、オブジェクト変数/スイッチ、アクションなど)をオートセーブポイントまで復元,1= 現在の状態を保持し、位置と向きのみを復元。clear_flags: クリアするものを加算して指定 —1= 弾パターン,2= エフェクトとパーティクル,4= オートセーブポイントに存在しなかったオブジェクト,8= リバイブリスト。0は何もクリアしません。transition_type/transition_duration: 画面効果とその継続時間で、別のシーンからオートセーブポイントに戻る際に使用されます。load_game_dataと同じ値です。restart_layer/restart_action: 戻った後に開始する状態。restart_layerはレイヤー(0がメインレイヤー)、restart_actionは状態です。restart_actionを指定しない場合は-1を渡します。
シグナル (AGMakerManager):
on_saved(slot_idx: int) / on_loaded(slot_idx: int)
シグナル (GameObject):
on_saved(slot: int, object: Object) / on_loaded(slot: int, object: Object)
カメラ API
CameraTargetSettings の生成
var camera_target_settings = CameraTargetSettings.new()
camera_target_settings._target_id = "Any ID"
camera_target_settings._is_active_target = true
camera_target_settings._visible_size = Vector2(100, 100)
add_child(camera_target_settings)
camera_target_settings.position = Vector2(100, 100)
ZoomCamera2D への CameraTargetSettings の登録
$ZoomCamera2D.regist_target(camera_target_settings.get_instance_id())
ZoomCamera2D からの CameraTargetSettings の解除
$ZoomCamera2D.unregist_target(camera_target_settings.get_instance_id())
その他の ZoomCamera2D メソッド
get_target_ids() / set_target_ids(value), get_move_enabled() / set_move_enabled(value), get_zoom_enabled() / set_zoom_enabled(value), get_min_zoom() / set_min_zoom(value), get_max_zoom() / set_max_zoom(value)
FaceDirectionSettings API
set_face_direction(face_direction, is_opposite = false): 第1引数は向いている方向の角度、第2引数は反転するかどうかです。第2引数は省略可能です。get_face_direction(): 現在の向いている方向の角度を返します。set_target_node(target_node): 向くノードを設定します。
シグナル: set_face_direction(face_direction: float, is_opposite: bool)
シグナルはメソッドと同じ名前であることに注意してください。接続するには face_direction_settings.set_face_direction.connect(...) とします。
GameObject メソッド
設定ノードの取得
GameObject は、所有する各設定ノードに対するゲッターを公開しています。ノードが存在しない場合は null を返します。
get_base_settings(), get_variable_settings(), get_switch_settings(), get_move_and_jump_settings(), get_child_settings(), get_on_remove_settings(), get_bullets_settings(), get_taken_damage_settings(), get_damage_display_settings(), get_after_image_settings(), get_change_angle_settings(), get_invincible_settings(), get_camera_target_settings(), get_bind_objects(), get_face_direction_settings()
ステートと識別情報
get_internal_object_id(), get_display_direction(), get_face_direction(), get_face_direction_from_settings(), is_operated_controller(), is_savable(), get_enable_tile_effect(), get_initial_action_id(), get_revive_action_id(), get_animation_player_node(), get_apply_animation()
向きの変更
change_face_direction(type, is_absolute, direction = 0)easing_face_direction(curve, duration, type, is_absolute, direction = 0)
シグナル
send_signal(signal_name: String, value)— 「シグナルを送る」アクションによって発行されます。メニューボタンが押されたことをビジュアルスクリプトに伝える際に使用します。enable_tile_effect_changed(is_enable: bool)on_saved(slot: int, object: Object)/on_loaded(slot: int, object: Object)
GameScene メソッド
get_camera_list(), get_gravity(), get_gravity_direction(), get_audio_data_id(), get_loop_type(), is_played_previous_bgm()
オブジェクトプール (GameObjectPools) API
プールからオブジェクトを取り出すことや返すことはエンジンによって処理されるため、それ用の API はありません。GDScript でできるのはプールの設定と状態の読み取りです。詳細は「GDScript から GameObjectPools を設定する」マニュアルを参照してください。
| 目的 | 呼び出し |
|---|---|
| プールリストを設定 | pools.set_pool_data_list(list) |
| プールリストを取得 | pools.get_pool_data_list() |
| 1つのシーンに対する休眠数 | pools.get_dormant_count("res://objects/bullet.tscn") |
| ツリー内のすべてのプールの状態 | GameObjectPools.get_all_pool_status_list() (static) |
| プリウェームの進捗状況 | GameObjectPools.get_all_prewarm_count() (static) |
| プリウェームが完了したか | GameObjectPools.is_all_prewarm_finished() (static) |
3つの静的メソッドはノード参照を必要としないため、デバッグ表示に便利です。
シグナル: prewarm_finished — ノードが処理するプリウェームが完了したときに1回発行されます。
LoadingScene API
読み込み画面のルートノードが LoadingScene の場合に利用可能です。
| 目的 | 呼び出し |
|---|---|
| 0.0 から 1.0 の進捗率 | get_progress_ratio() |
| ロードが開始されたか | is_load_started() |
| ロードが完了したか | is_load_finished() |
シグナル: progress_updated(progress: float), load_started, load_finished
別途、ルートノードのスクリプトに set_progress(ratio) という名前のメソッドを実装した場合、エンジンが自動的にプログレスバーを更新する代わりにそのメソッドを呼び出します。これはバインドされた API ではなく、エンジンが名前で検索するメソッドです。
その他の AGMakerManager メソッド
GDScript で作成されたゲームオブジェクトを AGMakerManager に登録
AGMakerManager.regist_game_object(target_node)
- AGMakerManager は ACTION GAME MAKER のさまざまな側面を管理するシステムです。GameObject のライフサイクルも追跡するため、AGMakerManager 外部で生成されたオブジェクトは手動で登録する必要があります。
- パスではなく、ノード自体を渡してください。引数の型は
Node2Dです。 - 対応する解除メソッドは GDScript に公開されていません。オブジェクトが解放されると自動的に解除されます。
シーン遷移
get_current_game_scene()
- 現在実行中の GameScene を返します。戻り値の型は GameScene です。
サンプルコード:
func _ready() -> void:
var game_scene = AGMakerManager.get_current_game_scene()
print("*** get current scene = ", game_scene.name)
シグナル
このセクションでは、ACTION GAME MAKER の各種操作中に発行されるシグナルをリストします。
GameObject
セーブ/ロード シグナル
セーブ実行時: on_saved(slot: int, object: Object)
ロード実行時: on_loaded(slot: int, object: Object)
その他
send_signal(signal_name: String, value)
enable_tile_effect_changed(is_enable: bool)
AGMakerManager
セーブ/ロード シグナル
セーブ実行時: on_saved(slot_idx: int)
ロード実行時: on_loaded(slot_idx: int)
データベース変更シグナル
notify_database_variable_value_changed(record_name: String, value: float)
notify_database_switch_value_changed(record_name: String, value: float)
シーン遷移関連シグナル
game_scene_about_to_change(current: Object)
このシグナルは、シーン遷移が実行される直前に発行されます。
パラメータ current には、遷移前の GameScene が受け取られます。
game_scene_changed(current: Object)
このシグナルは、シーン遷移が完了した後に発行されます。
パラメータ current には、遷移後の GameScene が受け取られます。
注意: パラメータの型は Godot の仕様により Object です。
使用時にはユーザー側で GameScene または Node2D にキャストしてください。
サンプルコード:
func _ready() -> void:
# シーン遷移前に発行されるシグナルに接続
AGMakerManager.game_scene_about_to_change.connect(_on_before_change_scene)
# シーン遷移後に発行されるシグナルに接続
AGMakerManager.game_scene_changed.connect(_on_after_change_scene)
func _on_before_change_scene(current_scene: GameScene):
print("*** on before change scene = ", current_scene.name)
func _on_after_change_scene(current_scene: GameScene):
print("*** on after change scene = ", current_scene.name)
VariableSettings / SwitchSettings
apply_value(variable_name: String, value) / apply_value(switch_name: String, value: bool)
FaceDirectionSettings
set_face_direction(face_direction: float, is_opposite: bool)
GameObjectPools
prewarm_finished
LoadingScene
progress_updated(progress: float), load_started, load_finished