いつもお世話になっております。
ゲームプレイエフェクトの期間ありで一定時間ごとに実行されるタイプの挙動について質問をさせて頂きます。
ゲーム中にて、継続ダメージ(Dotダメージ)を作成するにあたり、GEにて HasDuration と Period を設定し、
一定時間ごとにダメージを与えるGEアセットを作成しました。
ここでこのGEの動作中に残りの与ダメージ値を取得したいのですが、FActiveGameplayEffectでは適用回数が取得できないため
残り時間とダメージ値をもとに計算で残りダメージ値を算出したのですがやはり実行タイミングの問題なのかズレがでてしまいます。
// DOTダメージの残り予定ダメージ値を計算する
const FActiveGameplayEffect* _AGE = _ASC->GetActiveGameplayEffect(_Handle);
if (_AGE) {
int32 _Damage = 0;
float _Remain = _AGE->GetTimeRemaining(GetWorld()->GetTimeSeconds());
float _Period = _AGE->GetPeriod();
int32 _OneDmg = (int32)_AGE->Spec.GetSetByCallerMagnitude(FGameplayTag::RequestGameplayTag(FName("Data.Damage")));
// 残りのダメージ値合計の計算
_Damage = (int32)(FMath::CeilToInt(_Remain / _Period) * _OneDmg);
UE_LOG(LogTemp, Log, TEXT("Remain=%f, Health=%f, Damage=%d"), _Remain, GetHealth(), _Damage);
}
例としてDurationが4秒で、1秒ごとに適用設定、ダメージ値が10、ヘルスが100の状態でログを出してみると
残り時間が3秒を切ったタイミングで予定ダメージ値が計算上30になりますがこの時点ではヘルスにはまだ反映されていないためズレがでております。
LogTemp: Remain=3.003804, Health=100.000000, Damage=40
LogTemp: Remain=2.985813, Health=100.000000, Damage=30 // ←このタイミングでズレがでる
LogTemp: Remain=2.966654, Health=90.000000, Damage=30
LogTemp: Remain=2.948841, Health=90.000000, Damage=30
この問題は適用回数が取得できないためだと思うのですが、適用回数を取得する方法が見当たりません。
こちらを正確に取得する方法はありますでしょうか。
お手数ですがよろしくご確認をお願いいたします。