Trepidation

Yeni üye
24 Ocak 2016
123
4
0
Azerbeycan
Selam arkadaşlar. Ben playerin böyle yanan bir yere girdiğinde, mesela yanan ateşin üstünde durduğunda hasar almasını yani sağlığının azalmasını istiyorum. Ben bir actor blueprint oluşturdum ve box collision ekledim ve bok collison On Component Begin Overlap yaptım.Şimdi sorun şu sağlık azalmasına azalıyor da ama her trigger a girib çıktığımda oluyor sadece.Yani triggera giriyorum mesela 10% gidiyor ama devam etmiyor.Tekrar çıkıyorum triggerdan giriyorum yine 10% giyor duruyor.Benim istediğim ise triggerda olduğum sürede can sağlığı durmadan azalsın ve sadece triggerdan çıktığımda dursun.Bunu nasıl yaparım?
 
Algoritmanız hatalı. Çalışma prensibi bir kerelik %10 eksiltme şeklinde olmamalı.

Collision gerçekleştiği sürece, değeri 0'dan küçük eşittir olana kadar, belirli zaman aralıklarıyla %10'ar azalması gerek sağlığın. Yani döngü yapısı kullanmanız gerekecek. Blueprint paylaşırdım şimdi hemen; ama Unreal Engine'e erişimim olmadığı için mümkün değil şu anda.

Yardımcı olmadıysa blueprint'inizin SS'ini atın, oradan daha kolay olur sorunu çözmesi.
 
dyanikoglu' Alıntı:
Algoritmanız hatalı. Çalışma prensibi bir kerelik %10 eksiltme şeklinde olmamalı.

Collision gerçekleştiği sürece, değeri 0'dan küçük eşittir olana kadar, belirli zaman aralıklarıyla %10'ar azalması gerek sağlığın. Yani döngü yapısı kullanmanız gerekecek. Blueprint paylaşırdım şimdi hemen; ama Unreal Engine'e erişimim olmadığı için mümkün değil şu anda.

Yardımcı olmadıysa blueprint'inizin SS'ini atın, oradan daha kolay olur sorunu çözmesi.

BP işte böyle kardeş
 

Ekli dosyalar

  • test.png
    test.png
    79 KB · Görüntüleme: 10
Trepidation' Alıntı:
dyanikoglu' Alıntı:
Algoritmanız hatalı. Çalışma prensibi bir kerelik %10 eksiltme şeklinde olmamalı.

Collision gerçekleştiği sürece, değeri 0'dan küçük eşittir olana kadar, belirli zaman aralıklarıyla %10'ar azalması gerek sağlığın. Yani döngü yapısı kullanmanız gerekecek. Blueprint paylaşırdım şimdi hemen; ama Unreal Engine'e erişimim olmadığı için mümkün değil şu anda.

Yardımcı olmadıysa blueprint'inizin SS'ini atın, oradan daha kolay olur sorunu çözmesi.

BP işte böyle kardeş

Şö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 onFire? boolean değerini ise EndOverlap event'i ile belirleyin. EndOverlap olduğunda değeri false olsun ki beginOverlap'taki döngünüz sona ersin ve canınız azalmayı kessin. BeginOverlap olduğunda yani kutu içine girdiğinizde ise tekrar true olsun ki oluşturduğunuz döngü devam edebilsin.
 
dyanikoglu' Alıntı:
Trepidation' Alıntı:
BP işte böyle kardeş

Şö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 onFire? boolean değerini ise EndOverlap event'i ile belirleyin. EndOverlap olduğunda değeri false olsun ki beginOverlap'taki döngünüz sona ersin ve canınız azalmayı kessin. BeginOverlap olduğunda yani kutu içine girdiğinizde ise tekrar true olsun ki oluşturduğunuz döngü devam edebilsin.

Resimli örnek olsaydı daha aydınlatıcı olurdu   :shy:
 
dyanikoglu' Alıntı:
Trepidation' Alıntı:
BP işte böyle kardeş

Şö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)
Ekli dosyayı görüntüle 3
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.
 

Ekli dosyalar

  • DamaVolume.png
    DamaVolume.png
    126.4 KB · Görüntüleme: 15
cahitburak' Alıntı:
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.
Çok teşekkür ederim. Denedim ve oldu. Peki şimdi böyle bir şey mümkün mü triggerdan çıktığımızda sağlık aynı şekilde yavaş-yavaş full haline geri dönsün yani 100 olsun tekrardan.
 
Trepidation' Alıntı:
cahitburak' Alıntı:
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.
Çok teşekkür ederim. Denedim ve oldu. Peki şimdi böyle bir şey mümkün mü triggerdan çıktığımızda sağlık aynı şekilde yavaş-yavaş full haline geri dönsün yani 100 olsun tekrardan.

Aynı mantığı tersten kurup karakter tarafında, Tick üzerinde sağlık durumuna değer ekleyerek çözebilirsin. Sadece Event Take Damage olayında son alınan damage zamanını(Get Real Time Seconds) tutmalısın ki Tick üzerinde örneğin 15 sn geçmeden sağlık arttırma işlemi yapmayasın.
 
cahitburak' Alıntı:
Trepidation' Alıntı:
Çok teşekkür ederim. Denedim ve oldu. Peki şimdi böyle bir şey mümkün mü triggerdan çıktığımızda sağlık aynı şekilde yavaş-yavaş full haline geri dönsün yani 100 olsun tekrardan.

Aynı mantığı tersten kurup karakter tarafında, Tick üzerinde sağlık durumuna değer ekleyerek çözebilirsin. Sadece Event Take Damage olayında son alınan damage zamanını(Get Real Time Seconds) tutmalısın ki Tick üzerinde örneğin 15 sn geçmeden sağlık arttırma işlemi yapmayasın.
Hocam bir örnek BP resim olsaydı daha güzel olurdu :)
 
Trepidation' Alıntı:
cahitburak' Alıntı:
Aynı mantığı tersten kurup karakter tarafında, Tick üzerinde sağlık durumuna değer ekleyerek çözebilirsin. Sadece Event Take Damage olayında son alınan damage zamanını(Get Real Time Seconds) tutmalısın ki Tick üzerinde örneğin 15 sn geçmeden sağlık arttırma işlemi yapmayasın.
Hocam bir örnek BP resim olsaydı daha güzel olurdu :)

Hocam Belki Sırası Değil Ama Bu Bluprints' i Android Platformunda mı Kullanacaksın