Mengapa Menggunakan Object Pool
Termasuk bagian Arsitektur Game di Unity dalam perjalanan Unity di Coddy. Pelajaran 46 dari 64.
Senjata yang menembakkan 10 peluru per detik selama satu menit memanggil Instantiate 600 kali dan Destroy 600 kali. Setiap Instantiate menyalin prefab beserta semua komponennya dan menjalankan Awake, OnEnable, serta Start milik komponen tersebut. Setiap Destroy menjalankan OnDisable dan OnDestroy, lalu membiarkan memori objek tersebut sebagai sampah. Pengumpul sampah C# membebaskan memori itu nanti, dan prosesnya terjadi pada beberapa frame, tetapi tidak pada frame lainnya, sehingga muncul sebagai patah-patah, terutama pada ponsel yang lebih lambat.
Pool menyimpan objek alih-alih menghancurkannya. Peluru yang sudah ditembakkan dinonaktifkan dengan SetActive(false) lalu dikembalikan ke pool; tembakan berikutnya mengambil satu peluru dari pool dan mengaktifkannya, sedangkan Instantiate hanya berjalan saat pool kosong. Setelah beberapa detik pertama menembak, penembakan tidak membuat objek baru dan tidak menghasilkan sampah. Saat objek digunakan kembali, Awake dan Start tidak dijalankan lagi: keduanya hanya berjalan sekali, saat objek dibuat. Apa pun yang harus dimulai ulang setiap kali digunakan, seperti timer, health, atau velocity, diatur ulang di OnEnable atau oleh kode yang mengambil objek tersebut.
Pooling bermanfaat untuk objek yang sering dibuat lalu dibuang: peluru, percikan, angka damage, serta musuh dalam game gelombang. Pooling tidak bermanfaat untuk boss yang hanya muncul sekali atau menu yang sesekali dibuka. Pool selalu menyimpan memori untuk objeknya yang tidak aktif, jadi pool menyimpan jumlah yang wajar dan membiarkan objek yang berlebih dilepas.
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 BersamaRangkuman: Turret ModularRangkuman: Meriam Kembar4Data yang Diserialisasi
Class yang Dapat DiserialisasiList di InspectorEnum di InspectorRangkuman: Tabel LootRangkuman: Acak Loot2Antarmuka di Unity
IDamageableAntarmuka dan TryGetComponentGetComponentsRingkasan: Tombol InteractRingkasan: Terdekat dalam Jangkauan5ScriptableObjects
Aset DataStatistik SenjataPengaturan BersamaSelamatkan AnginGelombang sebagai DataRekap: database ItemBeli dari Toko8Kode yang Dapat Digunakan Kembali
Extension methodSingleton GenerikHelper GenerikUlasan: FindNearest3Event
Event C# di UnityBerlangganan di OnEnableField UnityEventEvent Menggerakkan UIRangkuman: Popup PencapaianRangkuman: Timer Popup6Menyimpan dengan JSON
JsonUtilitySimpan GameMuat dan Nilai DefaultRingkasan: Slot SimpananPilih dan Hapus Slot9Object Pooling
Mengapa Menggunakan Object PoolPool dengan QueueObjectPool di UnityRingkasan: Pool PeluruLatihan sendiri: Playground Unity