Вступить в клуб →
средняявопросПрофилирование и оптимизация

После подсветки урона батчинг рассыпался, а память растёт весь бой

Врагов подсвечивают при получении урона:

void OnHit()
{
    GetComponent<Renderer>().material.color = Color.red;
}

До этой правки 200 врагов с общим материалом рисовались считанными вызовами. После неё число вызовов отрисовки растёт по мере боя, а объём занятой памяти увеличивается и не возвращается назад между волнами. Что произошло?

  • Обращение к material создаёт персональную копию материала для каждого объекта: копии не попадают в один пакет и не выгружаются сами
  • Разница между material и общим материалом только в том, что второй доступен из редакторных скриптов
  • Память растёт из-за Color.red: структура упаковывается в объект при каждом присваивании, а таких присваиваний за длинный бой набираются тысячи
  • Пакеты ломаются от самого факта изменения цвета в рантайме: движок объединяет только те объекты, свойства которых не менялись после загрузки сцены

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела