omer.hatay

Üye
2 May 2019
182
14
18
26
(34) İstanbul Avrupa
Hocalarım selam. Öncelikle bu 
Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.
 videoyu bırakayım. Videoda her şeyi çok net açıkladım. Daha öncesinde bu konuya benzer bir konu açmıştım. Önceki Konu bu konudaki problemi çözmek için o zamanlar aklımda bir fikir yoktu. Olayın performans ile alakalı olduğunu düşünüyordum. Ama onunla alakası olmadığını gördüm. Farklı farklı cihazlarda test ettim. Zaten artık test etmeme gerek kalmadan da olayın niye öyle gerçekleştiğini anlayabiliyorum. Olay tamamen, hayatta zamanında gerçekleşmesini istediğimiz hiçbir şey zamanında gerçekleşmiyor oluşu. Bu bilgisayarların dünyasında da geçerli. 1 saniyede 1 kere çalışacak bir timer kurduğumuzda onun tam 1 saniye sonra çalışacağını düşünerek aslında çok yanılıyoruz. İstediğimiz sürelerden milisaniyelik sapmalar oluyor ve o sapmaları hesaba çoğunlukla katmıyoruz. Ben yeni oluşturduğum sistemde o sapmaları hesaba katarak bir atış mekaniği oluşturmaya çalıştım fakat, onunla beraber başka problemler karşıma çıktı. Var mı bununla ilgili bir fikriniz, çözümünüz? İnternetin hiçbir yerinde bundan bahseden olmamış. Kimse mi bu sorundan muzdarip değil arkadaş? Not: bu yaptığım sistemle, tickten ve timerdan bağımsız olarak saniyede belki binlerce mermi üretmek mümkün.
 
Videoda gördüğüm bazı mermiler ilk kez spawn olduğunda başlangıç noktasından 1 mermi mesafesinden daha uzakta doğuyor. Bu da mermi hızının spawn ederken çarptığın hızdan daha yavaş olduğu gibi bir düşünce doğurdu ama öyle olsa diğer mermilerin aralıkları eşit olamazdı. projectile ve spawner dosyalarını atabilirsen ben de bir kurcalarım
 
Projeye baktım set global time dillation 0.01 yaparak. çok net görünüyor orda aradaki fark. Niagara sanırım GPU kullandığından ya da thread üzerinden mi yapıyor bilmiyorum tam zamanında spawn ediyor.

Bir çözüm söyleyebilirim. Son çıkan mermiyi ilerde başlatma. Tam 0 noktasınran başlasın. Ama 3000 hızla değil de 3000 den daha hızlı başlayarak önündeki mermi ile hızını 0.020 küsur ms içinde kapatsın. Yani aradaki fark kapanana kadar hızlı başlat sonra hızı öndeki ile eşitle. Mermiler aşırı hızlı ilerlediği için bu hız farkı anlaşılmaz ve mermi tam 0 noktasından doğuyor gibi görünür. Önündeki mermi ile mesafesini ölçmek için ya önceki merminin referansını sonraki mermiye aktarırsın ya da matematik işlemleri ile yaparsın.

Mesela şöyle yap. Mermi spawn olunca bu mermiyi kaydet bir değişkene. Sonraki mermi spawn olduğunda kaydettiğin değişkeni expose et buna. Bu da her karede o referans ile olan mesafesine baksın. Eğer mesafe 66 dan büyük ise add world offset ile o yöne doğru 3-4 birim daha yaklaşsın taa ki mesafe 66 olana kadar. 66 olunca referansı siler ve yoluna devam eder. Böyle yaparsan mermi hızını değiştirmene matematik hesaplamaları yapmana da gerek kalmaz. Tabi iki merminin birden spawn olduğu durumlarda bir ilk merminin senin eski sistemdeki gibi biraz önde spawn olması, son merminin 0 da spawn olup mesafe kapatması gerek
 
Hocam, mesafe bazlı yaratmayı da düşünmüştüm. Ama onun da zamana bağlı yaratmadan pek bir farkı yok. Diğer türlü, öndeki mermiye yetişecek şekilde arkadan gelen bir mermi olayı oldukça zor. Hele böyle küçük zaman dilimlerinde. Ama yine de güzel fikir. Yapabilirsem buraya atarım.
 
Blueprint sistemin güzel olmuş fakat yüksek atış hızlarında hatalı çalışacak. Timepool değerin çok yüksek değerlere çıkabilir. Orada bir düzeltme yapmalısın. 

Not: Bu tip hızlı çalışan sistemlerde fps'yi göstermen olan biteni daha kolay anlamamızı sağlar.
 
omer.hatay' Alıntı:
Hocam, mesafe bazlı yaratmayı da düşünmüştüm. Ama onun da zamana bağlı yaratmadan pek bir farkı yok. Diğer türlü, öndeki mermiye yetişecek şekilde arkadan gelen bir mermi olayı oldukça zor. Hele böyle küçük zaman dilimlerinde. Ama yine de güzel fikir. Yapabilirsem buraya atarım.

Oyun yapımında kolay diye bir şey yok. İstediğin sonuca ulaşmanın her zaman kolay bir yöntemi yok. Oyun yapmak zaten kolay bir şey olsaydı heveli herkes oyun çıkarabiliyor olurdu.