Unity 3D TR Forum

Orjinalini görmek için tıklayınız: Sonradan neden sonsuz döngüye giriyor?
Şu anda (Arşiv) modunu görüntülemektesiniz. Orjinal Sürümü Görüntüle internal link
Selamun aleyküm. Öncelikle kolay gelsin herkese, oyunum uzayda geçiyor ve uzay gemisi satın alabileceğiniz bir sistem yaptım, uzay gemisinin prefabını ayarladım, mağazadan butona bastığınızda geçerli geminin tüm childları while döngüsüyle destroy ediliyor, sonrasında prefab'tan childlar tek tek çekilip oluşturuluyor. İlk gemiyi alırken sorun yok ancak eski gemiye geçmek için butona bastığımda while döngüsü sonsuz döngüye giriyor ve unity sonsuz döngüyle karşılaştığında ne olduğunu biliyorsunuz, donuyor gibi bir şey ama donmuyor Big Grin.
Bu arada ilk geminin 9 child'ı var, ikinci geminin 10 child'ı var, child sayısıyla pek alakası olduğunu düşünmüyorum ama yinede yazayım dedim.

[attachment=14]

Koddaki sorun while döngüsünde çünkü eski gemiye dönerken while döngüsünü sildiğimde unity donmuyor.
O kod'da sonsuz döngüye girmesini sağlayacak bir durum göremedim ben sorunun farklı bir yerde olabilir bence şu olabilir hatta child sayısı değiştiğinden silmeye çalıştığında hata alıyor olabilirsin.
Sorun farklı bir yerdeymiş, bir yerde destroy yazmışım ki bu kodlarda nedense destroy çalışmıyor, destroyimmediate kullanmam gerekiyor, o destroy yazdığım yeri düzelttim ve sorunum çözüldü Smile
(20-07-2017, Saat: 19:18)No_99 Nickli Kullanıcıdan Alıntı: Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!Sorun farklı bir yerdeymiş, bir yerde destroy yazmışım ki bu kodlarda nedense destroy çalışmıyor, destroyimmediate kullanmam gerekiyor, o destroy yazdığım yeri düzelttim ve sorunum çözüldü Smile

Destroy komutu geçen bende denedim çalışmadı sebebini anlamadım bende ya destroyimmediate farkı neymiş ?
unitygeek.com 'dan anladığım kadarıyla,
Destroy, nesneyi frame tamamlandığında yok etmekte ve ilgili değerleri null olarak atmakta.
DestroyImmidiate, adından da anlaşılacağı gibi, bu işlemi daha hızlı yapmakta, frame'in tamamlanmasını beklememekte.

Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.! bunu konsola çıktılar vererek başarılı şekilde test etmişler.

Yine Unity Scripting Api altındaki resmi Linkleri görüntüleyebilmek için Kayıt ol manız veya Giriş yapmanız gerekiyor.Anlayışınız için teşekkürler.!, fark aynı şekilde belirtilmiş.
Her şeyden önce kesinlikle DestroyImmidiate yerine Destroy kullanılması ağır şekilde tavsiye edilmiş.
Destroy metodu her zaman frame'in sonuna kadar ertelenmekte, ilgili frame de ilgili gameobject ya da bu gameobject'in özellikleri ile ilgili herhangi bir işlem yapılması durumunda bir sorun yaşanmaması için.
DestroyImmidiate ise sıradan yordam sırasına göre daha öncelikli olarak çalışmakta ve frame'in sonuna kadar beklenmemekte. Bunun kullanılması tavsiye edilmiyor çünkü aynı frame içerisinde ilgili gameobject'in özelliklerine müdahale söz konusu olursa muhtemelen hata verecektir diye anlıyorum.
Teşekkürler Smile