Падает FPS при уничтожении объекта в Unity

Я делаю подбирание предмета, и мне нужно уничтожать объект и добавлять к переменной количества, и при уничтожение фпс падает с ~40 до ~10, я уже пробовал использовать SetActive(true), но то же самое.

Код уничтожения >>

using UnityEngine;

public class GetTarget : MonoBehaviour
{
    [Header("Предметы")]
    public static int stick = 0;
    public static int stone = 0;
    public static int tree = 0;

    private void OnTriggerStay(Collider collider) 
    {
        if(collider.CompareTag("Ground") && Input.GetMouseButtonDown(0))
        {
            return;
        }
        else if(collider.CompareTag("Stick") && Input.GetMouseButtonDown(0))
        {
            stick++;
            Destroy(collider.gameObject);
        }
        else if(collider.CompareTag("Tree") && Input.GetMouseButtonDown(0))
        {
            tree++;
            Destroy(collider.gameObject);
        }
        else
        {
            if(Input.GetMouseButtonDown(0))
            {
                collider.gameObject.SetActive(false);
            }
        }
    }
}

Ответы (1 шт):

Автор решения: aepot

Этот метод можно оптимизировать, очевидно, что если мышь не нажата, то метод ничего не делает, тогда зачем эту мышь проверять 4 раза? Доступ к тегу коллайдера тоже можно использовать один раз.

private void OnTriggerStay(Collider collider) 
{
    if (!Input.GetMouseButtonDown(0))
        return;

    switch (collider.tag)
    {
        case "Stick":
            stick++;
            break;
        case "Tree":
            tree++;
            break;
        default:
            return; // случай с Ground тоже попадает сюда
    }
    Destroy(collider.gameObject);
}

Не факт, что это гарантированно спасёт от просадок, но метод будет бодрее работать.

Досконально механику Unity не знаю, но можете проверить, сколько раз вызывается Destroy. Для этого добавьте в конец метода

Debug.Log(collider.tag + " destroyed.");

И посчитайте, по сколько раз для каждого объекта производится вывод в отладочную консоль. Если по одному разу, то проблема тормозов не в этом коде, а где-то в другом месте.

Если же вывод для удаляемого объекта несколько раз, то метод придется пропатчить, чтобы Destroy не вызывался повторно.

→ Ссылка