Menerapkan Penggabungan Objek dalam Unity

Pengumpulan objek adalah pola desain yang digunakan dalam pengembangan game untuk mengelola dan menggunakan kembali objek game secara efisien. Di Unity, membuat instance dan menghancurkan objek secara sering dapat menyebabkan masalah kinerja karena alokasi memori dan pengumpulan sampah. Penggabungan objek mengatasi hal ini dengan membuat instance sejumlah objek yang telah ditentukan sebelumnya di awal permainan dan kemudian menggunakannya kembali sesuai kebutuhan, alih-alih membuat dan menghancurkannya dengan cepat.

Tutorial ini akan memandu Anda dalam mengimplementasikan pengumpulan objek di Unity menggunakan C#. Kami akan membuat contoh sederhana dengan proyektil yang dikumpulkan dan digunakan kembali.

Langkah 1: Menyiapkan Proyek

  1. Buat proyek Unity baru atau buka proyek yang sudah ada.
  2. Buat GameObject kosong di adegan Anda untuk bertindak sebagai manajer kumpulan objek.

Langkah 2: Menulis Skrip Penggabungan Objek

using System.Collections.Generic;
using UnityEngine;

public class ObjectPooler : MonoBehaviour
{
    public static ObjectPooler Instance;

    public GameObject pooledObject;
    public int pooledAmount = 20;
    List pooledObjects;

    void Awake()
    {
        Instance = this;
    }

    void Start()
    {
        pooledObjects = new List();
        for (int i = 0; i < pooledAmount; i++)
        {
            GameObject obj = Instantiate(pooledObject);
            obj.SetActive(false);
            pooledObjects.Add(obj);
        }
    }

    public GameObject GetPooledObject()
    {
        for (int i = 0; i < pooledObjects.Count; i++)
        {
            if (!pooledObjects[i].activeInHierarchy)
            {
                return pooledObjects[i];
            }
        }

        return null;
    }
}

Langkah 3: Membuat Objek ke Pool

Buat cetakan untuk objek yang ingin Anda kumpulkan. Untuk contoh ini, mari kita membuat proyektil sederhana.

  1. Buat GameObject baru dan beri nama "Projectile".
  2. Lampirkan komponen Rigidbody ke dalamnya untuk memungkinkan interaksi fisika.
  3. Secara opsional, lampirkan komponen Collider untuk mendeteksi tabrakan.
  4. Seret GameObject ke dalam folder Assets untuk membuat cetakan.

Langkah 4: Menggunakan Object Pooler

using UnityEngine;

public class ProjectileSpawner : MonoBehaviour
{
    public float fireRate = 0.5f;
    float nextFire = 0.0f;

    void Update()
    {
        if (Input.GetButtonDown("Fire1") && Time.time > nextFire)
        {
            nextFire = Time.time + fireRate;
            SpawnProjectile();
        }
    }

    void SpawnProjectile()
    {
        GameObject projectile = ObjectPooler.Instance.GetPooledObject();

        if (projectile != null)
        {
            projectile.transform.position = transform.position;
            projectile.transform.rotation = transform.rotation;
            projectile.SetActive(true);
        }
    }
}

Langkah 5: Uji

  1. Lampirkan skrip 'ProjectileSpawner' ke GameObject mana pun di adegan Anda.
  2. Tetapkan prefab Proyektil ke bidang 'pooledObject' di komponen 'ObjectPooler' dari manajer GameObject.
  3. Jalankan game dan tekan tombol api (dengan asumsi "Fire1") untuk menelurkan proyektil.

Kesimpulan

Pengumpulan objek adalah teknik pengoptimalan yang penting dalam pengembangan game, terutama di Unity. Dengan menggunakan kembali objek alih-alih membuat instance dan menghancurkannya berulang kali, Anda dapat meningkatkan performa dan efisiensi game Anda. Dalam tutorial ini, Anda telah mempelajari cara mengimplementasikan pengumpulan objek di Unity dengan contoh sederhana menggunakan C#.