После перевода снарядов на пул они пульсируют и возвращаются в пул дважды
Снаряды перевели с создания и уничтожения на пул объектов. Компонент снаряда:
public class Projectile : MonoBehaviour
{
void OnEnable()
{
transform.DOScale(1.2f, 0.2f).SetLoops(-1, LoopType.Yoyo);
GameEvents.LevelFinished += Despawn;
}
void Despawn() => _pool.Release(this);
}
Через несколько волн снаряды начинают пульсировать всё сильнее, а в лог сыплются жалобы пула на повторный возврат одного и того же объекта. Что происходит?
- Пул несовместим с твинами: анимации можно запускать только на объектах, созданных заново
- Объект из пула не создаётся заново, а лишь включается: начатое в OnEnable надо гасить в OnDisable, иначе твины и подписки копятся
- Проблема в том, что возврат в пул вызывается прямо из обработчика события: список подписчиков меняется во время рассылки, вызов надо перенести в LateUpdate
- Достаточно увеличить стартовый размер пула: объекты будут переиспользоваться реже, подписки не успеют накопиться, и эффект исчезнет сам собой
