Menu
CoddyTech

Nesneleri Neden Havuzda Toplarız

Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 37 / 50.

Dakikada 10 mermi/saniye hızla ateş eden bir silah, Instantiate'ı 600 kez ve Destroy'ı 600 kez çağırır. Her Instantiate, prefab'ı tüm bileşenleriyle birlikte kopyalar ve bu bileşenlerin Awake, OnEnable ve Start metotlarını çalıştırır. Her Destroy, OnDisable ve OnDestroy metotlarını çalıştırır ve nesnenin belleğini çöp olarak geride bırakır. C#'ın çöp toplayıcısı bu belleği daha sonra serbest bırakır; çalışması bazı karelere denk gelirken diğerlerine gelmez ve bu da özellikle daha yavaş telefonlarda en belirgin olan takılmalara yol açar.

Nesne havuzu nesneleri yok etmek yerine saklar. Kullanılmış bir mermi SetActive(false) ile devre dışı bırakılır ve havuza geri döner; sonraki atışta havuzdan bir nesne alınır ve etkinleştirilir. Instantiate yalnızca havuz boş olduğunda çalışır. İlk birkaç saniyelik ateşten sonra, ateş etmek yeni bir şey oluşturmaz ve çöp bırakmaz. Yeniden kullanımda Awake ve Start tekrar çalışmaz: nesne oluşturulduğunda bir kez çalışmışlardır. Zamanlayıcı, sağlık veya hız gibi her kullanımda sıfırlanması gereken değerler OnEnable içinde ya da nesneyi havuzdan alan kod tarafından sıfırlanır.

Nesne havuzlama; mermiler, kıvılcımlar, hasar sayıları ve dalga tabanlı bir oyunun düşmanları gibi sık sık oluşturulup atılan nesneler için faydalıdır. Bir kez ortaya çıkan bir bölüm sonu canavarı ya da ara sıra açılan bir menü için fayda sağlamaz. Havuz, etkin olmayan nesnelerinin belleğini her zaman tutar; bu yüzden makul sayıda nesne saklar ve fazlalıkları serbest bırakır.

Kendin dene

Bu ders bir kod alıştırması içermiyor.

quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Unity'de Oyun Mimarisi bölümündeki tüm dersler