Задать вопрос
@vova_20

Как обработать нанесение урона объектам бомбой которые находятся в радиусе ее взрыва?

Добрый день! Уже второй день сижу и не могу понять почему не работает как надо мой код:

void Update()
    {
        StartCoroutine(DamageObjects());
    }
    
    IEnumerator DamageObjects()
    {
        Collider2D[] collider2D = Physics2D.OverlapCircleAll(transform.position, explosionRadius);

        foreach (Collider2D col in collider2D)
        {
            if (col.tag == enemyName)
            {
                yield return new WaitForSeconds(0.3f);
                DamageEnemy(col.transform);
                Destroy(gameObject);
            }
        }
    }
    
    void DamageEnemy(Transform enemy)
    {
        Enemy e = enemy.GetComponent<Enemy>();

        if (e != null)
        {
            e.TakeDamage(damage);
        }
    }


Когда бомба взрывается и объекты которые вошли в радиус взрыва, то урон наносится только одному объекту. Раньше работал этот код. Кто подскажет как сделать чтоб урон наносился всем объектам которые вошли в радиус взрыва?
  • Вопрос задан
  • 542 просмотра
Подписаться 1 Простой 8 комментариев
Решения вопроса 1
@vova_20 Автор вопроса
Спасибо всем за помощь!!! Решил проблему:) Если кому интересно и нужно, то смотрите:
void Update()
    {
        ...
        transform.position = nextPos;

        if (nextPos == endPoint)
        {
            DamageObjects();
        }   
    }

    void DamageObjects()
    {
        Collider2D[] collider2D = Physics2D.OverlapCircleAll(transform.position, explosionRadius);
        if (collider2D.Length > 0)
        {
            foreach (Collider2D col in collider2D)
            {
                if (col.tag == enemyName)
                {
                    DamageEnemy(col.transform);
                    Destroy(gameObject);
                }
            }
        }
        else
        {
            Destroy(gameObject);
        }
        
    }

    void DamageEnemy(Transform enemy)
    {
        Enemy e = enemy.GetComponent<Enemy>();

        if (e != null)
        {
            e.TakeDamage(damage);
        }
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@ColdSpirit
Поставьте Destroy(gameObject); после цикла foreach:

// проходим по каждому задетому коллайдеру
foreach (Collider2D col in collider2D)
{
	// если это враг
	if (col.tag == enemyName)
	{
		// ждем 0,3с
		yield return new WaitForSeconds(0.3f);
		// наносим ему урон
		DamageEnemy(col.transform);
	}
}

// уничтожаем бомбу
Destroy(gameObject);
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы