Почему после 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 шт):
Костыль, но твою проблему должен решить, метод должен быть в player'е:
private void OnCollisionEnter2D (Collision2D collision)
{
if (collision.gameObject.CompareTag("hpBottle")) // прверяем, что столкнулись именно с бутылкой
{
lives++;
health++;
Debug.Log(lives);
Destroy(collision.gameObject); // уничтожаем бутылку
}
}
У всех hpBottle установи тэг "hpBottle", иначе работать не будет.
Судя по коду у тебя есть некий hpBottle. Похоже, что при спавне бутылочек ты записываешь их в эту переменную. И удаляется только последняя бутылка, которая записалась туда при спавне. А не эта конкретная.
Лучше смотреть не по тегу и не сравнивать с этой бутылкой. А смотреть наличие компонента на объекте с которым столкнулся.
private void OnCollisionEnter2D (Collision2D collision)
{
// если у префаба с которым столкнулся есть компонент бутылки
if (collision.gameObject.TryGetComponent<Bottle>(out var bottleComponent))
{
//причем в неё же можно записать количество жизней и другую информацию
lives += bottleComponent.LivesCount;
Debug.Log(lives);
Destroy(bottleComponent.gameObject); // уничтожаем бутылку
}
}