Почему после Destroy(hpBottle) перестают удаляться другие объекты этого же префаба?

Сделал банки здоровья, которые восстанавливают 1 жизнь по OnCollisionEnter2D. После Destroy(hpBottle) работает только первая банка, другие стоят на месте и пройти в них нельзя. С чем может быть связано?

private void OnCollisionEnter2D(Collision2D hpCollision)
{
    if (hpCollision.gameObject == hpBottle)
    {
        lives++;
        health++;
        Destroy(hpBottle);
        Debug.Log(lives);
    }
}

Также пробовал сделать отдельный скрипт удаления для банок (который повесил на них), но тогда работает так: 1ая банка, а другие удаляются, но жизни не увеличивают:

    private void OnCollisionEnter2D(Collision2D collision)
{
    if (collision.gameObject == player)
    {
        Destroy(this.gameObject);
    }
}

код у игрока, в этом случае, выглядит так:

private void OnCollisionEnter2D(Collision2D hpCollision)
{
    if (hpCollision.gameObject == hpBottle)
    {
        lives++;
        health++;
        Debug.Log(lives);
    }
}

Ответы (2 шт):

Автор решения: Qwer

Костыль, но твою проблему должен решить, метод должен быть в player'е:

private void OnCollisionEnter2D (Collision2D collision)
{
    if (collision.gameObject.CompareTag("hpBottle")) // прверяем, что столкнулись именно с бутылкой
    {
        lives++;
        health++;
        Debug.Log(lives);
        Destroy(collision.gameObject); // уничтожаем бутылку
    }
}

У всех hpBottle установи тэг "hpBottle", иначе работать не будет.

→ Ссылка
Автор решения: Boronnikov Andrey

Судя по коду у тебя есть некий hpBottle. Похоже, что при спавне бутылочек ты записываешь их в эту переменную. И удаляется только последняя бутылка, которая записалась туда при спавне. А не эта конкретная. Лучше смотреть не по тегу и не сравнивать с этой бутылкой. А смотреть наличие компонента на объекте с которым столкнулся.

private void OnCollisionEnter2D (Collision2D collision)
{ 
    // если у префаба с которым столкнулся есть компонент бутылки
    if (collision.gameObject.TryGetComponent<Bottle>(out var bottleComponent))
    {
        //причем в неё же можно записать количество жизней и другую информацию
        lives += bottleComponent.LivesCount; 
        Debug.Log(lives);
        Destroy(bottleComponent.gameObject); // уничтожаем бутылку
    }
}
→ Ссылка