UE4 C++ GameplayAbilitiesを勉強していくPart.3-3 GameplayEffect StackingとOverflow

やあ

今回は、GameplayEffectStackingOverflowについて勉強していくよ。

間違いなどあれば教えてくださると助かります!

前回

pto8913.hatenablog.com

Stackingについて

f:id:pto8913:20200530212135p:plain
Duration PolicyHas DurationInfinite
GameplayEffectをスタックすることができる!
とりあえず説明。

Stacking Type

Stacking Type 説明
None スタックされずに別々のインスタンスとして扱われる。
Aggregate by Source このGameplayEffectのソースAbilitySystemComponent(ASC)毎にスタックが存在する。
Aggregate by Target ソースに関係なく、スタックのインスタンスが一つだけ存在する。スタックは最大スタック量まで可能。

Aggregate by Sourceの例として、

ASC_1を持ったプレイヤーとASC_2を持った敵が、このGameplayEffectを適用していたとしたとき、
プレイヤーには2スタックされている。
敵には5スタックされている。
ということになる。

Aggregate by Targetの例として、

ASC_1を持ったプレイヤーとASC_2を持った敵が、このGameplayEffectを適用していたとしたとき、
プレイヤーには2スタックされている。
敵にも2スタックされている。
ということになる。

Stack Limit Count

Stack Limit Count : 最大スタック量。

Stack Duration Refresh Policy

Gamepaly EffectDuration PolicyHas Durationに設定されている時、
持続時間のリセット方法を設定できるよ。

Stack Duration Refresh Policy 説明
Reflesh on Successful Application スタックに新しく積まれたら、持続時間をリセット。例えば、2秒の持続時間のとき、1秒経過時点でスタックに新しく積まれたら、持続時間を0秒にする。
Never Refresh スタックに積まれても、リセットされない。

Stack Period Reset Policy

Gamepaly EffectDuration PolicyHas Durationに設定されている時、
周期のリセット方法を設定できるよ。

Stack Duration Refresh Policy 説明
Reset on Successful Application スタックに新しく積まれたら、周期をリセット。例えば、2秒周期のとき、1秒経過時点でスタックに新しく積まれたら、経過時間を0秒にする。
Never Reset スタックに積まれても、リセットされない。

Stack Expiration Policy

Gamepaly EffectDuration PolicyHas Durationに設定されている時、
持続時間が経過してGameplay Effectが終了するときにスタックがどうやって処理されるかを設定できるよ。

Stack Expiration Policy 説明
Clear Entire Stack 全部消す。
Remove Single Stack and Refresh Duration スタックから一つ取り出し、持続時間をリセットする。
Refresh Duration 持続時間をリセットする。

Overflowについて

f:id:pto8913:20200531004241p:plain
Stackingのスタックが最大スタック量を超えたら発生するよ。

Overflow Effects

適用するGameplayEffect

Deny Overflow Application

true なら、スタックが上限を超えた際のGamepalyEffectは適用されず、持続時間もリセットされないよ。

Clear Stack on Overflow

true なら、スタックが上限を超えた際、スタックをすべてクリアするよ。
Deny Overflow Applicationがtrueのときに、設定できる

よくわかんないから実際に使ってみる

良い感じの処理を思いつかないので、
砕蜂(BLEACH)さんの始解「雀蜂」の能力、弐撃決殺みたいに、
一回攻撃を受けたらスタックを積んで、二回目の攻撃を受けたらダメージ(本当は死ぬんだけど)みたいな処理を実装するよ。

Overflow用のGameplayEffectの作成

スタックが最大スタック量を超えたときの処理。
100ダメージを与えるよ
f:id:pto8913:20200530235649p:plain

Staking用のGameplayEffectの作成

f:id:pto8913:20200531000558p:plain
持続時間10秒の間に、再びGE_Stackが適用されたらスタックが積まれるよ。

GameplayEffectの適用

`3‘を一回押したらスタックが積まれて、二回目を押すと100ダメージを受けるよ。
f:id:pto8913:20200531000915p:plain

テスト

f:id:pto8913:20200531001254g:plain
できてるね。

うーん使いどころが難しそうだなーってかんじ

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

次回

Expirationについて勉強するよ。
pto8913.hatenablog.com