Mengapa Menggunakan Object Pool
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 37 dari 50.
Senapan yang menembakkan 10 peluru per detik selama satu menit memanggil Instantiate 600 kali dan Destroy 600 kali. Setiap Instantiate menyalin prefab beserta semua komponennya, lalu menjalankan Awake, OnEnable, dan Start. Setiap Destroy menjalankan OnDisable dan OnDestroy, lalu meninggalkan memori object sebagai sampah. Pengumpul sampah C# membebaskan memori itu nanti. Prosesnya terjadi pada beberapa frame, tetapi tidak pada frame lainnya, sehingga muncul jeda tersendat, terutama pada ponsel yang lebih lambat.
Pool menyimpan object alih-alih menghancurkannya. Peluru yang sudah ditembakkan dinonaktifkan dengan SetActive(false) lalu dikembalikan ke pool. Tembakan berikutnya mengambil satu peluru dari pool dan mengaktifkannya. Instantiate hanya dijalankan ketika pool kosong. Setelah beberapa detik pertama menembak, setiap tembakan tidak membuat apa pun yang baru dan tidak menghasilkan sampah. Saat digunakan kembali, Awake dan Start tidak dijalankan lagi: keduanya sudah dijalankan sekali saat object dibuat. Apa pun yang harus diatur ulang setiap kali digunakan, seperti timer, kesehatan, atau kecepatan, diatur ulang di OnEnable atau oleh kode yang mengambil object dari pool.
Pooling berguna untuk object yang sering dibuat lalu dibuang, seperti peluru, percikan, angka kerusakan, dan musuh dalam game berbasis gelombang. Pooling tidak berguna untuk boss yang muncul sekali atau menu yang sesekali dibuka. Pool selalu menyimpan memori untuk object yang tidak aktif, jadi pool menyimpan jumlah yang wajar dan membuang sisanya.
Coba sendiri
Pelajaran ini tidak memiliki tantangan kode.
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Arsitektur Game di Unity
1Komponen, Bukan Hierarki
Komponen KecilSkrip Dasar MusuhKomponen AbstrakKomponen yang Bekerja SamaRingkasan: Turret Modular5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaGelombang sebagai DataUlasan: database Item8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearest3Event
Event C# di UnityBerlangganan di OnEnableField UnityEventEvent Menggerakkan UIRingkasan: Popup Pencapaian9Object Pooling
Mengapa Menggunakan Object PoolPool dengan QueueObjectPool di UnityRingkasan: Pool Peluru