huso

Üye
27 Eki 2015
50
3
8
(34) İstanbul Avrupa
Arkadaşlar şöyle bir sorun yaşıyorum, kendi karakterimi koypayalayıp düşman karakter oluşturdum, ve benim ana karakterimle belli bir mesafeye ve aynı yüksekliği (z ekseni) ne gelince ateş etmesini sağlamaya çalışıyorum. Aslında bunu başardımda, X EKSENİNDE belirli bir mesefeye gelince VE Z EKSENİNDE aynı seviyede olduklarında şartlar yerine geliyor yani (TRUE ) oluyor ve düşman karakter durup bana ateş ediyor.

Ama,  network 4 kere çalıştıktan sonra devreye girmiyor. Sanki kendini yenileyemiyor gibi yada 4 kere çalıştıktan sonra bozuluyor gib. Aşağıda networkün resmini gönderiyorum, daha önce bu tip bir şey başınıza geldi mi ? 

Mesela eğer aynı z eksenin de olma şartını ortadan  kaldırdığım zaman sorunsuz çalışıyor, ama aynı z eksenleri şartı olduğu zaman 4 kere çalıştıktan sonra teklemeye başlıyor.

5aNOEl.jpg
[/url][/img]
 
Değerlerdeki noktaların üstüne sağ tiklayip watch value yapip, oyunu çalıştırırken değerlere bakarsan hatanın nerede olduğunu daha iyi anlarsın.
 
Network dediğin şeyi, gösterdiğin blueprint scripti olarak algılıyorum. 

Floating point için hesaplama değerleri yanlış olabilir veya hesaplanabilir fakat yapmak istediğin şey en temiz yöntemle her bir tick için bu karşılaştırmayı yapmak yerine Linetrace(Raycasing) ile yapılması en muhtemel şey. 

Aşağıdaki videoda navigasyonun konumuna göre bir raycasting hesaplaması yapılıyor. Kısacası 2 boyutlu düzlemde belirli bir vektörden, bitiş vektörüne kadar bir doğru çiziliyor ve buna çarpan nesnelerin referansları alınabilinliyor.

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

3 Boyutlu düzlemde de şu şekilde oluyor, silahın ucundan diğer nesneye çarpabilen tek kanallı bir vektörel iz takipçisi:

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

İlla ben böyle karşılaştıracağım diyorsan floating number precisionları tolere etmek için için isnearlyequal düğümü var: http://api.unrealengine.com/INT/BlueprintAPI/Math/Float/NearlyEqual_float/
 
Arkadaşlar tekrardan selam, cevaplarınız için çok teşekkür ederim. Sorunu çözdüm.

Karakter her zıplayıp yere tekrar indiğinde ondalık olarak  mesela 0.0001 gibi farklı seviyelere iniş yapıyormuş. Bundan dolayı düşman karakter ile önemsenmeyecek kadar az bir yükseklik farkı oluyormuş.

Fakat kıyasladığım değerler FLOAT türünden olduğu için koşulu bozuyor ve çalışmasını engelliyorumuş. Ben de değerleri İNT türüne çevirip öyle kıyaslayınca sorun çözüldü :)

Yanlız hiç bir matematiksel farklılık olmamasını rağmen niçin FLOAT türünde  çok düşük ondalıkta bile olsa fark ortaya çıktığını anlamış değilim, onun nedenini henüz bulamadım.

Mesela ilk başlarken karakterin buldunduğu yükseklik 63.0002 ise  zıplayıp tekrar düştüğü yükseklik 63.0001 oluyor, tekrar zıplayıp yere indiğinde 63.0004 oluyor. Bunun sebebini anlamadım. Bug mıdır yoksa gözümden kaçakan, ACTOR de sabitlemem gereken bir şey var da ben mi farkında değilim bulamadım.

Tekrardan çok teşekkür ederim değerli cevaplarınız için :)
 
Khubur' Alıntı:
Network dediğin şeyi, gösterdiğin blueprint scripti olarak algılıyorum. 

Floating point için hesaplama değerleri yanlış olabilir veya hesaplanabilir fakat yapmak istediğin şey en temiz yöntemle her bir tick için bu karşılaştırmayı yapmak yerine Linetrace(Raycasing) ile yapılması en muhtemel şey. 

Aşağıdaki videoda navigasyonun konumuna göre bir raycasting hesaplaması yapılıyor. Kısacası 2 boyutlu düzlemde belirli bir vektörden, bitiş vektörüne kadar bir doğru çiziliyor ve buna çarpan nesnelerin referansları alınabilinliyor.

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

3 Boyutlu düzlemde de şu şekilde oluyor, silahın ucundan diğer nesneye çarpabilen tek kanallı bir vektörel iz takipçisi:

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

İlla ben böyle karşılaştıracağım diyorsan floating number precisionları tolere etmek için için isnearlyequal düğümü var: http://api.unrealengine.com/INT/BlueprintAPI/Math/Float/NearlyEqual_float/

Mesajını şimdi gördüm, hemen inceleyeceğim bu tutorialleri, tam söylediğin gibi float türünden değerlerde ondalık anlamda sapma oluyor. Int türüne çevirip sorunu şimdilik çözdüm fakat matematiksel olarak her şey aynıyken neden float değerinde çok küçükte olsa oynama oluyor onu anlayamadım.
 
Float değerlerinde bu tür sapmalar olması normal, motora özgü birşey de değil, o yüzden float değerler için Nearly Equal gibi kıyaslamalar kullanmak en sağlıklısı veya imkan olan zamanlarda integer'e dönüştürüp kıyaslama yapılabilinir.
 
huso' Alıntı:
Khubur' Alıntı:
Network dediğin şeyi, gösterdiğin blueprint scripti olarak algılıyorum. 

Floating point için hesaplama değerleri yanlış olabilir veya hesaplanabilir fakat yapmak istediğin şey en temiz yöntemle her bir tick için bu karşılaştırmayı yapmak yerine Linetrace(Raycasing) ile yapılması en muhtemel şey. 

Aşağıdaki videoda navigasyonun konumuna göre bir raycasting hesaplaması yapılıyor. Kısacası 2 boyutlu düzlemde belirli bir vektörden, bitiş vektörüne kadar bir doğru çiziliyor ve buna çarpan nesnelerin referansları alınabilinliyor.

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

3 Boyutlu düzlemde de şu şekilde oluyor, silahın ucundan diğer nesneye çarpabilen tek kanallı bir vektörel iz takipçisi:

Bu içeriği görmek için üçüncü parti çerezlerine izin vermeniz gerekli.
Daha fazla detay için çerezler sayfasını ziyaret edin.

İlla ben böyle karşılaştıracağım diyorsan floating number precisionları tolere etmek için için isnearlyequal düğümü var: http://api.unrealengine.com/INT/BlueprintAPI/Math/Float/NearlyEqual_float/

Mesajını şimdi gördüm, hemen inceleyeceğim bu tutorialleri, tam söylediğin gibi float türünden değerlerde ondalık anlamda sapma oluyor. Int türüne çevirip sorunu şimdilik çözdüm fakat matematiksel olarak her şey aynıyken neden float değerinde çok küçükte olsa oynama oluyor onu anlayamadım.

Her bir frame için sürekli bu koşulu çağırmak doğru değil. Bunu yerine linetrace + projectilemovementcomponent kullanabilrisin. Floating number precision gibi sorunlardan ondalık kısmın uzantısını dengeleme belirsizliğine yol açtığı gibi ilerisi için ciddi performans sorunlarına neden olabilir. Çünkü sahnende bir sürü sprite var ve bunların her biri motorun tick ile orantılı şekilde harekete geçip diğer threadleri optimize ederek belirtmek zorunda.