omer.hatay

Üye
2 May 2019
182
14
18
26
(34) İstanbul Avrupa
Bir silahım var ve oyun başladıktan sonra bu silah sürekli ateş ediyor. BeginPlay'de bir Timer oluşturup, saniyede 25 atış yapması gibi mantık oluşturdum. Sorun şu ki eşit aralıklarla çalışmıyor ve oyunu durdurup mermilerin arasındaki mesafeyi kontrol ettiğim zaman birbirleri arasındaki uzaklıklar genel olarak farklı. Eğer az sayıda kurşun oluşturursam mesela saniyede 10 gibi, 25 kurşun oluşturmaya göre daha kararlı ateş ediyor. İstikrarlı bir şekilde ateş edebilmem için bir öneriniz var mı? Bu olayı Timer dışında delay fonksiyonu kullanarak çözebilirim ama işlerin karışmasını pek istemiyorum. Birde Editör FPS'im 60 benim ekran 144Hz, nasıl Editör FPS'ini artırabilirim?

Edit: C++ kullanarak oluşturacağım silah Actor'üyle alacağım verim ne kadar artar?
 
Nasıl bir sistem kurduğunu buradan paylaşabilirsen daha iyi bakabiliriz. Ancak daha önce timer da böyle zamansal bir hata olduğunu görmedim, duymadım. O mesafeler başka bir şeyllerden kaynaklanıyor olmasın.
Editörün FPS si derken level optimizasyonundan bahsediyorsun sanırım. Bu çok uzun bir konu ama genel olarak konu başlıklarından yazayım. LOD ler. MIP leveller, Cull Distancelar. Shader Instruction Count lar Texture size lar, Shadow Distancelar vb. GPU yu etkileyen bir sürü konu var. Bunun yanında bir de CPU yu etkileyen Tick fonksiyonların kapatılması, gereksiz BP lerden kaçınılması. Gereksiz döngülerin kaldırılması. GetAllActorsOfClass gibi normalde kullanılmaması gereken şeylerin kaldırılması gibi bir çok konu var. Burada anlatacak kadar küçük bir mesele değil bunlar.
C++ kullanmak ile BP kullanmak arasındaki fark yaptığın işlemlerin komplexliğine göre değişir. Yani basit bir şey se çok fazla fark hissetmezsin. Ağır bir şeyse daha çok fark hissedersin. Mesela Tick fonksiyonda çalışacak şeyler C++ da olursa daha hızlı olur vb. Yukarıda sorduğun konu öyle ağır bir şey değil. Bu bakımdan bu sorun özelinde çok bir performans artışı beklemem.
 Silahın neden zaman aralıklarına uymadığına  bakman gerekir. Loglarda zaman olayını açman gerekir Project settingsten. Oradan spawn zamanlarına bakıp gerçekten zamanla ilgili bir sıkıntı mı var bakabilirsin. Ama ben timerların zamanı ile ilgili bir sıkıntı olabileceğini pek zannetmiyorum.
 
Tamamdır hocam, bahsettiğiniz logları kontrol etme yöntemini deniyeceğim. Bu ara FPS artırmaktan kastım Editör deyken daha yüksek FPS istiyorum, optimizasyon kaynaklı bir FPS düşüklüğüm yok, sadece FPS im 60'a sabitli. 
2hkuo5n.png
 
InitialStartDelayVariance da bir rakam yok değil mi orada. Tam göremedim ama bir şey var gibi duruyor. Eğer bir şey yoksa sistemde bir sorun yok gibi duruyor. Muhtemelen BulletBase in bir "Projectile" ve onun parametrelerinde bir sıkıntı olabilir. Timer ın yanlış zaman aralıkları vereceğini zannetmiyorum.
FPS konusunda ise benim editörde 120 140 bile alabiliyorum. Sende nasıl 60 a sabitlenmiş bilmiyorum. Belki bir ayar falan vardır. Hiç bir bilgim yok maalesef.
 
editorde maksimum fps için komut var.   "t.MaxFPS 30" 30 yerine istediğin fpsyi yazacaksın.

Spawn işleminin de eşit aralıklarla olmaması gayet normal. frame süren 1/60 iken spawn zamanın 1/25 saniye. 2 yada 3 framede bir spawn olacaktır kurşunların. saniyede 10 kurşuna düşürdüğünde ise 6 frame de bir spawn olacaklar.
 
Cevaplayan herkese teşekkür ederim. Timer genel olarak doğru çalışıyor. Saniyede 100 kere çalış dediysem 100 kere çalışıyor ama eşit aralıklarla çalışmıyor. Belki editörden dolayıdır. Şu anlık çok önemli değil. Eğer ilerde aynı sıkıntı devam ederse, birde optimizasyonu ayarlarım öyle denerim.