不能在团结中伤害多个敌人



这是我的代码片段:

private void Cross()
{
animator.SetTrigger("cross");
Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, Firerange2, enemyLayers);
foreach (Collider2D enemy in hitEnemies)
{

enemy.GetComponent<Enemyhealth>().TakeDamage(crossdamage);
if (enemy == null)
{
return;
}
enemy.GetComponent<EnemyStuff>().TakeDamage(crossdamage);
if (enemy == null)
{
return;
}
}
}

在该代码中,Enemyhealth 脚本会损坏,但 EnemyStuff 不会损坏。如果我像这样重新排列它:

private void Cross()
{
animator.SetTrigger("cross");
Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, Firerange2, enemyLayers);
foreach (Collider2D enemy in hitEnemies)
{
enemy.GetComponent<EnemyStuff>().TakeDamage(crossdamage);
if (enemy == null)
{
return;
}
enemy.GetComponent<Enemyhealth>().TakeDamage(crossdamage);
if (enemy == null)
{
return;
}

}
}

EnemyStuff脚本被损坏,但EnemyHealth不会。 这是我的敌人物品伤害无效:

public void TakeDamage(int damage)
{
currentHealth -= damage;
// play hurt animaton
if (damage == 10)
{    
animator.SetTrigger("jab");

if (LookAtCharacter.facingRight == true)
{
rb.AddForce(new Vector2(-150, 0));

}
else if (LookAtCharacter.facingRight == false)
{
rb.AddForce(new Vector2(150, 0));

}

}
if (damage == 15)
{
animator.SetTrigger("uppercut");
if (LookAtCharacter.facingRight == false)
{
rb.AddForce(new Vector2(200, 130));
}
else if (LookAtCharacter.facingRight == true)
{
rb.AddForce(new Vector2(-200, 130));
}

}
if (damage == 20)
{
animator.SetTrigger("cross");
if (LookAtCharacter.facingRight == false)
{
rb.AddForce(new Vector2(200, 0));

}
else if (LookAtCharacter.facingRight== true)
{
rb.AddForce(new Vector2(-200, 0));

}



}

}

这是我的敌人他受到伤害无效: 公共无效 伤害(int 伤害( { 当前生命值 -= 伤害;

// play hurt animaton
if (damage == 10)
{
animator.SetTrigger("hurt");
if (enemyscript.facingRight == true)
{
rb.AddForce(new Vector2(-150, 0));
}
else if (enemyscript.facingRight == false)
{
rb.AddForce(new Vector2(150, 0));
}

}
if (damage == 15)
{
animator.SetTrigger("hurt");
if (enemyscript.facingRight == false)
{
rb.AddForce(new Vector2(200, 130));
}
else if (enemyscript.facingRight == true)
{
rb.AddForce(new Vector2(-200, 130));
}

}
if (damage == 20)
{
animator.SetTrigger("hurt");
if (enemyscript.facingRight == false)
{
rb.AddForce(new Vector2(200, 0));
}
else if (enemyscript.facingRight == true)
{
rb.AddForce(new Vector2(-200, 0));
}
}
}

我该如何解决这个问题?

看起来您正在按照以下任一行导致enemy变得null

enemy.GetComponent<EnemyStuff>().TakeDamage(crossdamage);
enemy.GetComponent<Enemyhealth>().TakeDamage(crossdamage);

然后,您选择将其作为从方法中return的条件。

我相信您想改用关键字continue代替return,以便在处理hitEnemies中的下一个enemy

我不确定这是否是您自己的实现,但是让这些方法使enemy对象无效似乎不是一个好主意,因为在这种情况下,您只能调用TakeDamage方法之一。

供您参考:

return将导致执行方法在执行时"停止"。如果该方法返回一个对象,则必须使用关键字返回该对象。

continue将导致运行包含循环的下一次迭代。

break将退出包含循环。

我通过将上面的代码行替换为以下内容来修复它:

' 私人无效 交叉(( { 动画 师。设置触发器("交叉"(; Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, Firerange2, enemyLayers(;

foreach (Collider2D enemy in hitEnemies)
{
if (enemy.CompareTag("enemy"))
{
enemy.GetComponent<Enemyhealth>().TakeDamage(crossdamage);
}
else
{ 
enemy.GetComponent<EnemyStuff>().TakeDamage(crossdamage);
}
`

相关内容

  • 没有找到相关文章

最新更新