Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在统一中用重叠球伤害敌人_C#_Unity3d_Overlap - Fatal编程技术网

C# 在统一中用重叠球伤害敌人

C# 在统一中用重叠球伤害敌人,c#,unity3d,overlap,C#,Unity3d,Overlap,我对C#中的重叠球体有问题。我试图制造一次爆炸,对附近的敌人造成伤害,但若火箭击中一个目标,它只会对这个目标造成伤害。当火箭在敌人附近的地面或墙上爆炸时,它不会造成伤害 EnemyHealth target = collision.collider.gameObject.GetComponent<EnemyHealth>(); Instantiate(explosionEffect, transform.position, transform.rotation);

我对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
        }
EnemyHealth target=collision.collider.gameObject.GetComponent();
实例化(爆炸效果、transform.position、transform.rotation);
Collider[]colliders=physical.overlapphere(transform.position,radius);
foreach(碰撞器中的碰撞器近旁对象)
{
对撞机敌人=nearbyObject.GetComponent();
如果(敌人!=null)
{
target.TakeDamage(伤害);//此功能对敌人造成伤害
}

它是我代码的一部分。我不知道如何修复它,这是我的第一个游戏,我以前没有使用Unity和C。

你没有在你的循环中设置敌人
EnemyHealth
,相反,你总是使用相同的
目标
来造成伤害。你需要为与球体碰撞的每个对象获取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
        }
    }
实例化(explosionEffect、transform.position、transform.rotation);
Collider[]colliders=physical.overlapphere(transform.position,radius);
foreach(碰撞器中的碰撞器近旁对象)
{
//假设有对撞机的敌方游戏对象也持有EnemyHealth脚本(!)
EnemyHealth敌人=nearbyObject.GetComponent();
如果(敌人!=null)
{
敌人。受到伤害;//此功能对敌人造成伤害
}
}

注意:调用
GetComponent()可能会很昂贵
因此,如果您经常这样做,您应该尝试为敌人缓存
EnemyHealth
组件。

半径是否足够长以击中目标?碰撞器是否与目标的变换正确匹配?敌人碰撞器是否位于与爆炸不交互的层中?我看不出有任何错误代码…可能是unity对象引起了你的麻烦每个敌人的目标没有改变…所以你每次命中目标都会损坏同一个对象我想这可能是原因,但我现在不知道如何修复它。我应该制作一张现场所有敌人的表或类似的东西吗?谢谢你的帮助,它修复了我的问题:)