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から登録されている

qiita.com

 

実際に有効になる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ごとにモンタージュが設定されている