概要
カスタムアクションプラグインとは、アクションや条件をGDScriptを使って作成し、既存のアクションや条件と同じように扱えるようにするシステムです。
カスタムアクションプラグインの導入方法
カスタムアクションプラグインの本体(特定の形式で記述された.gdファイル)が手元にある前提での解説となります。
- プラグインの本体(.gd)をプロジェクト内の任意のフォルダに配置します。(この時点で自動で読み込みが行われます)
- ヴィジュアルスクリプト画面を開きます。
- プラグインが条件の場合は任意のリンクにて「条件を追加」、アクションの場合は任意のステートで「アクションを追加」を選択します。
- 上部のタブをデフォルトのAGMakerから、CustomConditionやOfficialPlugin等のタブに切り替えます。(このタブ名は、プラグイン側で自由に設定できるため、プラグインによって表示される名称は異なります)
- プラグインのアクション/条件が存在すれば、あとは既存のアクション/条件と同様に利用ができます。
*注意点: プラグインのバージョン更新をする際は、元のプラグインと差し替える形で導入してください。「クラス名が競合している」という旨のエラーが発生する可能性があります。
カスタムアクションプラグインの作り方
カスタムアクションプラグインは、GDScriptの記述にのみ対応しています。
.gd形式のスクリプトを任意の場所に作成し、以下のフォーマットに沿って記述を行ってください。
アクションの場合
@tool
extends AGMPluginAction
class_name CustomAction
## 数値
@export var num: float = 0.0
## 属性
@export_enum("Fire", "Water", "Earth") var elements: int = 0
# タブを定義
func get_plugin_tab_name() -> String:
return "タブ"
# グループを定義
func get_group_name() -> String:
return "グループ"
# 追加ダイアログにてホバー時のツールチップにて表示される説明を定義
func get_description() -> String:
return "説明内容"
# ステート入場時に呼ばれる
func on_state_enter(p_owner: Object) -> void:
print("AGMPlugin : CustomAction: on_state_enter")
# ステート中常に呼ばれる
func on_state_update(p_owner: Object, p_delta: float) -> void:
print("AGMPlugin : CustomAction: on_state_update")
var gameobject:GameObject = p_owner as GameObject
var basesettings: BaseSettings = gameobject.get_base_settings()
basesettings.set_hp(num)
# ステート退場時に呼ばれる
func on_state_exit(p_owner: Object) -> void:
print("AGMPlugin : CustomAction: on_state_exit")
条件の場合
@tool
extends AGMPluginCondition
class_name CustomCondition
# タブを定義
func get_plugin_tab_name() -> String:
return "タブ"
# グループを定義
func get_group_name() -> String:
return "グループ"
# 追加ダイアログにてホバー時のツールチップにて表示される説明を定義
func get_description() -> String:
return "説明内容"
# 条件入場時に呼ばれる(ステートに入るタイミングで呼ばれる)
func on_condition_enter(p_owner: Object) -> void:
print("AGMPlugin : CustomCondition: on_condition_enter")
# 条件判定の為に常に呼ばれる
func on_judge_condition(p_owner: Object, p_delta_time: float) -> bool:
print("AGMPlugin : CustomCondition: on_judge_condition")
var gameobject:GameObject = p_owner as GameObject
var basesettings: BaseSettings = gameobject.get_base_settings()
if basesettings.get_hp() <= 0:
return true
else:
return false
# 条件退場時に呼ばれる(ステートから抜けるタイミングで呼ばれる)
func on_condition_exit(p_owner: Object) -> void:
print("AGMPlugin : CustomCondition: on_condition_exit")
コードを記述する上でのヒント
AGMPluginAction/ConditionはNode2Dの継承クラスではありません。
ownerであるGameObject(CharacterBody2Dベース)やArea2DGameObject(Area2Dベース)を取得して実行する形式で記述しましょう。
複数のアクション/条件からなる大規模なプラグインを作成する場合は、汎用処理をまとめたスクリプトを別途用意した継承チェーンを作ることが有効です。
