Падает 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 шт):
Этот метод можно оптимизировать, очевидно, что если мышь не нажата, то метод ничего не делает, тогда зачем эту мышь проверять 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 не вызывался повторно.