UE4 C++ GameplayAbilitiesを勉強していくPart.3-5 GameplayEffect GrantedAbilities
- やあ
- 前回
- GrantedAbilitiesについて
- Ability
- Level
- InputID
- Removal Policy
- 実際にGrantedAbilitiesを使ってみる
- 次回
やあ
今回はGameplayEffectのGameplayAbilitiesについて勉強するよ。
間違いなどあれば教えてくださると助かります!
前回
GrantedAbilitiesについて

・Duration PolicyがHas DurationかInfiniteの時だけ使えるよ。
・GameplayEffectが適用されたとき対象(自分自身でも可)にGameplayAbilityを付与するよ。
実はこれ、デフォルトで書かれているくせに、デフォルトでは使えないよ。
(使い方が悪いのかもしれないけど、僕にはデフォルトでの使い方がわからなかったよ。)
使い方は後で書くとして、とりあえず説明。
Ability
付与されるGameplayAbility
Level
どのレベルでこのGameplayAbilityを付与するか。
イミフ
InputID
このGameplayAbilityをバインドするためのID
(よくわかってません)
Removal Policy
どうなった時に、付与したGameplayAbilityを削除するか。
Removal Policy |
説明 |
|---|---|
Cancel Ability Immediately |
エフェクトが終了すると、バインドされたGameplayAbilityもバインドも削除される。バインドされたGameplayAbilityが終了すると、自動的にGameplayAbility->EndAbilityが呼び出されます。 |
Remove Ability On End |
エフェクトが終了すると、バインドされたGameplayAbilityもバインド解除される。自動的にEndAbilityは呼び出されないので注意 |
Do Nothing |
エフェクトが終了しても、バインドは解除されず、自動的にEndAbilityも呼び出されないので、手動で終了させる必要がある。 |
実際にGrantedAbilitiesを使ってみる
今回は適用すると3秒間スタミナが1秒毎に10ずつ減るGameplayEffectに、
適用するとスタミナが0.1秒毎に0.5ずつ回復する、GameplayEffectを適用するGameplayAbilityをGrantedAbilitiesに設定するよ。
GameplayAbilityのサブクラスを作成(超大事、どのくらい大事かというと☆100000000000個分)

MyGameplayAbility.hに追加
// Copyright(C)write by pto8913. 2020. All Rights Reserved. #pragma once #include "CoreMinimal.h" #include "Abilities/GameplayAbility.h" #include "ptoGameplayAbility.generated.h" UCLASS() class ABILITYTEST_API UptoGameplayAbility : public UGameplayAbility { GENERATED_BODY() public: virtual void OnAvatarSet(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) override; };
MyGameplayAbility.cppに追加
// Copyright(C)write by pto8913. 2020. All Rights Reserved. #include "Abilities/Ability/ptoGameplayAbility.h" #include "AbilitySystemComponent.h" #include "GameplayTagContainer.h" void UptoGameplayAbility::OnAvatarSet(const FGameplayAbilityActorInfo* ActorInfo, const FGameplayAbilitySpec& Spec) { Super::OnAvatarSet(ActorInfo, Spec); if (ActivateAbilityOnGranted) { bool ActivatedAbility = ActorInfo->AbilitySystemComponent->TryActivateAbility(Spec.Handle, false); } }
3秒間スタミナが1秒毎に10ずつ減るGameplayEffectを作成(GE_GrantedAbility)

0.1秒毎にスタミナが0.5ずつ回復するGameplayEffectを作成(GE_RefreshStamina)

GrantedAbilitiesに設定するためのGameplayAbilityを作成(GA_Granted)
親クラスはさっき作ったMyGameplayAbility

Ability Activate On Grantedを有効にする


GE_GrantedAbilityにGranted Abilitiesを設定

テスト

うまくいってるね。
Removal PolicyがRemove Ability on Endの時の処理
今回の処理だと、スタミナが最大になったらGE_RefreshStaminaを削除するという処理。



今回はここまで、ありがとうございました。