首页 > 解决方案 > 在 Unity C# 中制作现代 FPS 游戏健康再生系统

问题描述

我目前正在尝试在时间系统后进行再生,但无论我做什么都没有用,基本上是这样的:

玩家被击中,等待 2-3 秒并开始再生。但我无法让“等待 2-3 秒”重新生成。

代码:

    private void Hit()
{        
    if (PlayerShield > 0)
    {
        PlayerShield -= EnemyScript.EnemyBulletDamage;
    }
    else
    {
        Health = Health - EnemyScript.EnemyBulletDamage;
    }
    Invoke("Regen", 3);
    
    if (Health < 0)
    {
        Debug.Log("player dead");
    }
}
private void Regen()
{
    while (PlayerShield < 120)
    {
        PlayerShield += 10*Time.deltaTime;
        if (PlayerShield > 120)
        {
            PlayerShield = 120;
        }
    }

}

当我运行此程序时,如果玩家没有被击中几次,则此代码有效,但如果它在 3 秒内获得多次击中,则不会重新启动等待过程,这是我的主要问题。

标签: c#unity3d

解决方案


这里的一个简单解决方案是CancelInvoke在每次Invoke调用之前使用:

private void Hit()
{        
    if (PlayerShield > 0)
    {
        PlayerShield -= EnemyScript.EnemyBulletDamage;
    }
    else
    {
        Health = Health - EnemyScript.EnemyBulletDamage;
    }
    CancelInvoke("Regen");
    Invoke("Regen", 3);
    
    if (Health < 0)
    {
        Debug.Log("player dead");
    }
}
private void Regen()
{
    while (PlayerShield < 120)
    {
        PlayerShield += 10*Time.deltaTime;
        if (PlayerShield > 120)
        {
            PlayerShield = 120;
        }
    }

}

推荐阅读