Saya telah membaca tentang pola ini beberapa kali (dari perspektif praktik terbaik):
Alokasi Memori : Alih-alih membuat instance objek baru dengan cepat, selalu pertimbangkan untuk membuat dan menggunakan kumpulan objek. Ini akan membantu mengurangi fragmentasi memori dan membuat pengumpul sampah bekerja lebih sedikit.
Namun, saya tidak tahu apa artinya itu sebenarnya. Bagaimana saya bisa menerapkannya?
Sebagai contoh, saya dapat instantiate GameObject
menggunakan Instantiate
metode Unity?
Instantiate(prefab, new Vector3(2.0F, 0, 0), Quaternion.identity);
Apakah penggunaan ini tidak disarankan? Apa lagi artinya?
unity
c#
design-patterns
memory-efficiency
Muhammad Faizan Khan
sumber
sumber
Jawaban:
Jika Anda berencana untuk instantiate banyak instance dari cetakan yang sama, Anda pasti harus berpikir tentang menggunakan pengumpulan objek. Memanggil fungsi Instantiate Unity adalah salah satu metode panggilan paling berat yang bisa Anda lakukan.
Pengumpulan objek adalah saat Anda membuat cetakan awal sebelum digunakan. Mereka dinonaktifkan segera setelah instantiasi dan diaktifkan kembali hanya ketika mereka dibutuhkan. Meskipun hal ini meningkatkan penggunaan memori, ia menghindari overhead CPU instantiating selama bermain game.
Sebagai contoh, saya saat ini sedang mengerjakan permainan peluru neraka yang membutuhkan ratusan peluru untuk muncul pada saat runtime. Saya awalnya mencoba membuat permainan tanpa pengumpulan objek tetapi akhirnya menjadi bencana (kurang dari 2 fps). Sekarang, saya mengumpulkan 500 peluru sebelum pertandingan dimulai dan permainan berjalan sangat cepat (200 fps).
Ada situasi di mana pengumpulan objek tidak dapat digunakan. Misalnya, jika Anda memiliki permainan di mana input pemain menentukan prefab yang dihasilkan, maka Anda mungkin tidak punya pilihan selain menggunakan panggilan Instantiate yang normal. Pengumpulan objek hanya mungkin jika Anda tahu sebelumnya benda apa yang akan dibutuhkan.
Tutorial YouTube Sebastian Lague adalah sumber yang bagus untuk belajar tentang pengumpulan objek: https://youtu.be/LhqP3EghQ-Q
sumber