После подсветки урона батчинг рассыпался, а память растёт весь бой
Врагов подсвечивают при получении урона:
void OnHit()
{
GetComponent<Renderer>().material.color = Color.red;
}
До этой правки 200 врагов с общим материалом рисовались считанными вызовами. После неё число вызовов отрисовки растёт по мере боя, а объём занятой памяти увеличивается и не возвращается назад между волнами. Что произошло?
- Обращение к material создаёт персональную копию материала для каждого объекта: копии не попадают в один пакет и не выгружаются сами
- Разница между material и общим материалом только в том, что второй доступен из редакторных скриптов
- Память растёт из-за Color.red: структура упаковывается в объект при каждом присваивании, а таких присваиваний за длинный бой набираются тысячи
- Пакеты ломаются от самого факта изменения цвета в рантайме: движок объединяет только те объекты, свойства которых не менялись после загрузки сцены
