Код IT Загрузка примера кода…

C# main.cs
using System.Collections.Generic;
using UnityEngine;

public class ObjectPool : MonoBehaviour
{
    [SerializeField] private GameObject objectPrefab; // Префаб объекта для пула
    [SerializeField] private int poolSize = 10;      // Начальный размер пула

    private Queue<GameObject> pooledObjects; // Очередь для хранения неактивных объектов

    private void Awake()
    {
        InitializePool();
    }

    private void InitializePool()
    {
        pooledObjects = new Queue<GameObject>();

        for (int i = 0; i < poolSize; i++)
        {
            GameObject obj = Instantiate(objectPrefab);
            obj.SetActive(false);
            pooledObjects.Enqueue(obj);
        }
    }

    public GameObject GetPooledObject()
    {
        if (pooledObjects.Count > 0)
        {
            GameObject obj = pooledObjects.Dequeue();
            obj.SetActive(true);
            return obj;
        }
        else
        {
            // Если пул пуст, можно либо создать новый объект (не рекомендуется), либо расширить пул
            Debug.LogWarning("Object pool is empty!");
            return null;
        }
    }

    public void ReturnToPool(GameObject obj)
    {
        obj.SetActive(false);
        pooledObjects.Enqueue(obj);
    }
}
using System.Collections.Generic;
using UnityEngine;

public class ObjectPool : MonoBehaviour
{
    [SerializeField] private GameObject objectPrefab; // Префаб объекта для пула
    [SerializeField] private int poolSize = 10;      // Начальный размер пула

    private Queue<GameObject> pooledObjects; // Очередь для хранения неактивных объектов

    private void Awake()
    {
        InitializePool();
    }

    private void InitializePool()
    {
        pooledObjects = new Queue<GameObject>();

        for (int i = 0; i < poolSize; i++)
        {
            GameObject obj = Instantiate(objectPrefab);
            obj.SetActive(false);
            pooledObjects.Enqueue(obj);
        }
    }

    public GameObject GetPooledObject()
    {
        if (pooledObjects.Count > 0)
        {
            GameObject obj = pooledObjects.Dequeue();
            obj.SetActive(true);
            return obj;
        }
        else
        {
            // Если пул пуст, можно либо создать новый объект (не рекомендуется), либо расширить пул
            Debug.LogWarning("Object pool is empty!");
            return null;
        }
    }

    public void ReturnToPool(GameObject obj)
    {
        obj.SetActive(false);
        pooledObjects.Enqueue(obj);
    }
}