基本上,我有一个系统设置,其中一个文件有一个损害值,另一个文件有健康。
void Attack()
{
// Detect enemies in range of attack
Collider2D[] hitEnemies = Physics2D.OverlapCircleAll(attackPoint.position, attackRange, enemyLayers);
// Damage them
foreach(Collider2D enemy in hitEnemies)
{
Debug.Log("We hit " + enemy.name);
enemy.GetComponent<Enemy>().TakeDamage(attackDamage);
}
}
值得注意的是attackDamage被设置为40。
对于我的敌人脚本,这是重要的代码
public class Enemy : MonoBehaviour
{
public int maxHealth = 100;
int currentHealth;
// Start is called before the first frame update
void Start()
{
currentHealth = maxHealth;
}
public void TakeDamage(int damage)
{
currentHealth -= damage;
// Play hurt animation
if (currentHealth <= 0);
{
Die();
}
}
void Die()
{
Debug.Log("Enemy died!");
// Die animation
// Disable the enemy
}
这里的问题是,当我运行控制台和敌人,它说敌人有60健康,它仍然运行'敌人死亡!',即使这应该只发生在等于或小于0。顺便说一句,我用统一的c#
1条答案
按热度按时间toe950271#
我认为最有可能的问题是
hitEnemies
包含重复的或者已经死了的敌人。你可以检查敌人是否已经死了来解决这个问题。你也可以使用.Distinct
来删除重复的,但是运行攻击方法需要更长的时间。请记住,调试器可以是你最好的朋友。使用它来查看游戏中到底发生了什么。它可以让你跟踪和跟踪你的代码,看看发生了什么以及为什么它会这样做。