Gameplay ability system(GAS)のサンプルとしてActionRPGのプロジェクトを眺めていたメモ(攻撃アクション
全体的にGASが使われているようなので、参考にするため調査
攻撃アクションを見てみる
・攻撃アクションの流れ
「BP_PlayerCharacter」で攻撃入力受付
DoMeleeAttackから「ActivateAbilitiesWithItemSlot」が呼び出される(コンボの時は別処理
・ActivateAbilitiesWithItemSlotについて
C++側で記載されている。
FRPGItemSlotをキーとして
FGameplayAbilitySpecHandle型の変数を取り出し
それを元にアビリティを有効化(TryActivateAbility)する。
このアビリティは、SlottedAbilitiesに格納されていて、元を辿るとRPGGameInstanceBaseのItemSlotsPerType
つまり、BP_GameInstanceのDetailsから設定される
ここで設定しているKeyはPrimaryDataAssetsで登録したもの。
Project SettingsのAssetManagerから登録されている
実際に有効になるGamePlayAbilityは、PrimaryDataAssetで登録されている
URPGItem(アイテム)、URPGWeaponItem(アイテム+武器)
といったクラスをC++で作成している
上記フォルダのWeaponsの中に入ってる。
例としてWeaponAxeの設定画面。
ここのGranted Abilityの部分が適用するGamePlayAbilityになる
例えばこれを「GA_PotionHealth」にすると攻撃ボタンを押したときにHPの回復処理が走る。
なお、実際には処理が書かれているのは「GA_MeleeBase」で
各Melee系のGamePlayAbilityはこれを継承する。
この処理は敵味方問わず利用される
ここで使われている「Play Montage and Wait For Event」について
「URPGAbilityTask_PlayMontageAndWaitForEvent」で記載されている、AbilityTask。
モンタージュを再生して、設定したEventTagsの発火を監視したりする。
詳細は関数のコメントに記載されている
ここで使われているMontage to Playは、GA_MeleeBaseを継承した各アビリティ
例えばGA_PlayerAxeMeleeごとにモンタージュが設定されている