dyanikoglu' Alıntı:
Şöyle anlatayım, siz koyduğunuz overlap box'un içine girdiğinizde "BeginOverlap" event'i(Kullandığınız event) bir kez çalışır. Health'i set ettiğiniz node'u bir döngüye sokun ve onFire? gibi bir boolean değeri ile kontrol edin bu döngüyü. True iken döngü devam etsin, false olduğunda bitsin.
Bu yaklaşımda döngü, karakter yaşadıkça ve
trigger içinde bulundukça bitmeyecek ve sonraki
framee geçişi geciktirecektir. Muhtemel sonuçları da
FPS düşüşü olacak hatta karakter ölene veya triggerdan çıkana kadar uygulama tepkisiz kalacaktır. Tepkisiz bir oyunda zaten karakter hareket ettirilemez.
Boolean değer
Tick üzerinde kontrol edilip 1 kez
damage verirse(
Tick üzerinden olduğundan her frame tekrar edecektir)
frame gecikmesi yaratmayacaktır. Doğru yaklaşım bu olacaktır. Gerçi muhtemelen sen de döngü ile for/foreach/while...vb değil de GameLoop(Tick) kastettin.
Bir de bunun,
hasar veren Actor üzerinde yazılması hem tasarım açısından doğru bir yaklaşımdır hem de karmaşanın önüne geçer. Yani bu senaryoda
Apply Damage fonksiyonu
hasar veren ve kaçınılmaz olarak
Event Take Damage ise
hasar alan tarafta yazılmalıdır.
ApplyDamage(Trigger Volume)
Bu örnekte
trigger ile etkileşen
Actor'lerin
Pawn olanları filtre edilip, eğer zarar görebilen (
Can Be Damaged) türden ise zarar verilmiştir. Filtreleme işlemi
Actor de dahil tüm
Actor alt sınıflarına uygulanabilir. Bu yaklaşım ile, o an trigger içinde zarar görebilen(hasar alabilen) her aktöre zarar verilir. Bir de not düşmek gerekirse, örnekte
trigger içinde,
DamagePerSecond yani saniye başına verilen zarar değişkeni tutulmaktadır. Bu,
trigger içinde 1 saniye kalan bir
Actor'e toplamda ne kadar zarar verilebileceğini belirtir.
DeltaSeconds ile çarpmak 1 saniyede bu değerin elde edilmesini garantiler.