unity3d 为什么控制台日志在不应该关闭的时候关闭?

goqiplq2  于 2023-02-09  发布在  其他
关注(0)|答案(1)|浏览(133)

基本上,我有一个系统设置,其中一个文件有一个损害值,另一个文件有健康。

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#

toe95027

toe950271#

我认为最有可能的问题是hitEnemies包含重复的或者已经死了的敌人。你可以检查敌人是否已经死了来解决这个问题。你也可以使用.Distinct来删除重复的,但是运行攻击方法需要更长的时间。
请记住,调试器可以是你最好的朋友。使用它来查看游戏中到底发生了什么。它可以让你跟踪和跟踪你的代码,看看发生了什么以及为什么它会这样做。

相关问题