在特定时间内减少变量

fou*_*ing -2 c# unity-game-engine

因此,当我的角色被敌人的火焰呼吸击中时,我想创造出被点燃的角色的感觉.因此,当角色着火时,我希望他在特定的时间内失去特定的健康状况.

例如; 让我说他已经着火3秒了,我想让他因为着火而失去30点生命值,我将如何均匀分配失去30点生命值3秒钟?我不希望30点伤害立即应用到健康状态,我希望它能够慢慢击退玩家的健康状况,以便在3秒内完成30点伤害.

游戏是用c#制作的.

谢谢.

Pro*_*mer 5

这就像随着时间的推移移动Gameobject随着时间的推移做一些事情.唯一的区别是你必须使用Mathf.Lerp而不是Vector3.Lerp.您还需要通过从玩家生命的当前值中减去您想要丢失的值来计算结束值.您将其传递bMathf.Lerp函数的第二个参数.

bool isRunning = false;

IEnumerator loseLifeOvertime(float currentLife, float lifeToLose, float duration)
{
    //Make sure there is only one instance of this function running
    if (isRunning)
    {
        yield break; ///exit if this is still running
    }
    isRunning = true;

    float counter = 0;

    //Get the current life of the player
    float startLife = currentLife;

    //Calculate how much to lose
    float endLife = currentLife - lifeToLose;

    //Stores the new player life
    float newPlayerLife = currentLife;

    while (counter < duration)
    {
        counter += Time.deltaTime;
        newPlayerLife = Mathf.Lerp(startLife, endLife, counter / duration);
        Debug.Log("Current Life: " + newPlayerLife);
        yield return null;
    }

    //The latest life is stored in newPlayerLife variable
    //yourLife = newPlayerLife; //????

    isRunning = false;
}
Run Code Online (Sandbox Code Playgroud)

用法:

让我们说玩家的生命就是50,我们想23几秒钟内将其移除.新玩家的生命应该是几秒钟48之后3.

StartCoroutine(loseLifeOvertime(50, 2, 3));
Run Code Online (Sandbox Code Playgroud)

请注意,玩家的生命存储在newPlayerLife变量中.在协同程序功能结束时,您必须使用newPlayerLife变量中的值手动分配玩家的生命.