Nesneleri Neden Havuzda Toplarız
Coddy'nin Unity Journey'sinin Unity'de Oyun Mimarisi bölümünün bir parçası. Ders 46 / 64.
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.
Unity'de Oyun Mimarisi bölümündeki tüm dersler
1Kalıtım Değil, Bileşenler
Küçük BileşenlerTemel Düşman Script'iSoyut BileşenlerBirlikte Çalışan BileşenlerTekrar: Modüler TaretTekrar: Çift Namlulu Top4Serileştirilmiş Veriler
Serileştirilebilir SınıflarInspector'da ListelerInspector'da Enum'larTekrar: Ganimet TablosuTekrar: Ganimeti At2Unity'de Arayüzler
IDamageableArayüzler ve TryGetComponentGetComponentsÖzet: Etkileşim TuşuÖzet: Erişim Mesafesindeki En Yakın5ScriptableObjects
Veri VarlıklarıSilah İstatistikleriOrtak AyarlarRüzgârı KaydetVeri Olarak DalgalarTekrar: Eşya VeritabanıTekrar: Dükkândan Satın Al8Yeniden Kullanılabilir Kod
Genişletme MetotlarıGeneric SingletonGeneric YardımcılarTekrar: FindNearest3Olaylar
Unity'de C# OlaylarıOnEnable'da Abone OlUnityEvent AlanlarıOlaylar UI'ı YönlendirirÖzet: Başarım Açılır PenceresiÖzet: Açılır Pencere Zamanlayıcısı6JSON ile Kaydetme
JsonUtilityOyunu KaydetmeYükleme ve VarsayılanlarÖzet: Kayıt YuvalarıBir Yuva Seçme ve Silme9Nesne Havuzu
Nesneleri Neden Havuzda ToplarızKuyruk Kullanan Bir HavuzUnity'nin ObjectPool'ıÖzet: Mermi HavuzuKendi başına pratik yap: Unity playground