Нанесение урона врагам с помощью OverlapSphere в Unity - PullRequest
1 голос
/ 11 февраля 2020

У меня проблема с OverlapSphere в C#. Я пытаюсь сделать взрыв, который наносит урон ближайшим врагам, но если ракета поразит одну цель, он нанесет урон только этой. Когда ракета взрывается на полу или стене рядом с врагами, она не наносит ущерба.

    EnemyHealth target = collision.collider.gameObject.GetComponent<EnemyHealth>();
    Instantiate(explosionEffect, transform.position, transform.rotation);
    Collider [] colliders = Physics.OverlapSphere(transform.position, radius);
    foreach(Collider nearbyObject in colliders)
    {
        Collider enemy = nearbyObject.GetComponent<Collider>();

        if (enemy != null)
        {
            target.TakeDamage(damage); //this fuction deal damage to enemies
        }

Это фрагмент моего кода. Я не знаю, как это исправить, это моя первая игра, и я раньше не использовал Unity и C#.

1 Ответ

1 голос
/ 11 февраля 2020

Вы не устанавливаете врагов EnemyHealth в вашем l oop, вместо этого вы всегда используете один и тот же target для нанесения урона. Вам нужно получить компонент EnemyHealth для каждого объекта, столкнувшегося с вашей сферой:

    Instantiate(explosionEffect, transform.position, transform.rotation);
    Collider [] colliders = Physics.OverlapSphere(transform.position, radius);
    foreach(Collider nearbyObject in colliders)
    {
        // Assuming that the enemy gameobject with the collider also holds the EnemyHealth script (!)
        EnemyHealth enemy = nearbyObject.GetComponent<EnemyHealth>();

        if (enemy != null)
        {
            enemy.TakeDamage(damage); //this fuction deal damage to enemies
        }
    }

ПРИМЕЧАНИЕ: это может быть дорого вызывать GetComponent(), поэтому, если вы делаете это часто, вы следует попытаться кэшировать компоненты EnemyHealth для врагов.

...