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.
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
1Hiyerarşiler Değil, Bileşenler
Küçük BileşenlerTemel Bir Düşman BetiğiSoyut BileşenlerBirlikte Çalışan BileşenlerÖzet: Modüler Taret4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larÖzet: Ganimet Tablosu7Durum Makineleri
Sınıflar Olarak DurumlarBir Durum MakinesiGeçişlerDüşmanların Yapay ZekâsıTekrar: Kapı Durumları10Proje: Arena Hayatta Kalma
KahramanDüşman Türleri5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriPaylaşılan AyarlarVeri Olarak DalgalarTekrar: Eşya Veritabanı8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest3Olaylar
Unity'de C# OlaylarıOnEnable'da Abone OlmaUnityEvent AlanlarıOlaylar Arayüzü YönlendirirTekrar: Başarım Açılır Penceresi9Nesne Havuzu
Nesneleri Neden Havuzda ToplarızKuyruk Kullanan Bir HavuzUnity'nin ObjectPool'ıÖzet: Mermi Havuzu