- やあ
- 前回
- 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
を削除するという処理。
今回はここまで、ありがとうございました。