在 Unity 中用 OverlapSphere 伤害敌人

Damaging an enemies with OverlapSphere in Unity

我对 C# 中的 OverlapSphere 有疑问。我试图制造爆炸,对附近的敌人造成伤害,但如果火箭击中一个目标,它只会对这个目标造成伤害。当火箭在附近的敌人的地板或墙壁上爆炸时,它不会造成伤害。

    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#。

您没有在循环中设置敌人 EnemyHealth,而是始终使用相同的 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 组件敌人。