在 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
组件敌人。
我对 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
组件敌人。