在Unity C#中制作现代FPS游戏运行状况再生系统

时间:2020-06-26 20:18:35

标签: c# unity3d

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

玩家被击中,等待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秒钟内被多次击中,则不会重启等待过程,这是我的主要问题。

1 个答案:

答案 0 :(得分:0)

一种简单的解决方案是在每次Invoke调用之前使用CancelInvoke

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;
        }
    }

}