Вступить в клуб →
сложнаявопросАрхитектура игрового кода

После перевода снарядов на пул они пульсируют и возвращаются в пул дважды

Снаряды перевели с создания и уничтожения на пул объектов. Компонент снаряда:

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
  • Достаточно увеличить стартовый размер пула: объекты будут переиспользоваться реже, подписки не успеют накопиться, и эффект исчезнет сам собой

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

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

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

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