我需要累积一定量的能量,然后在释放鼠标按钮时释放它。现在,当能量级别达到最大值时,能量级别将设置为0,并且该函数将从刚开始重新开始累加,从而创建一个循环。

IEnumerator AttackCharge()
{
    while (true)
    {
        if (Input.GetMouseButton(1) && energyLevel < energyMax)
        {
            energyLevel += 1;

            yield return new WaitForSeconds(playRate);
        }

        if (Input.GetMouseButtonUp(1))
        {
            if (energyLevel == energyMax)
            {
                FxPlayerAttack.Stop();
                FxPlayerAttack.Play();
                shootSound.PlayOneShot(attackSound);

                GetComponentInChildren<ParticleCollision>().attackValue = energyLevel;
                yield return new WaitForSeconds(2);

                energyLevel = 0;
                GetComponentInChildren<ParticleCollision>().attackValue = energyLevel;
            }

            if (energyLevel < energyMax)
            {
                yield return new WaitForSeconds(2);
                energyLevel = 0;
            }
        }
        yield return null;
    }
}


按住按钮时,我需要积累能量。当按钮向上时,应释放能量,并在充电阶段达到最大值,能量水平应返回0,并且累积应停止,直到再次按下按钮为止。

最佳答案

GetMouseButtonUp仅在释放按钮的单个帧上返回true。然后输入您的代码yields

让我们来看一下:

if (Input.GetMouseButton(1) ...


用户希望攻击时就放开了鼠标,所以这是错误的。

else {
    yield return null;
}


因此,您屈服并等待下一帧。然后,当执行恢复时:

if (Input.GetMouseButtonUp(1))


这是错误的,因为用户在最后一帧释放了鼠标按钮。您应该将整个块嵌套在yield return null行上方的else语句中。

关于c# - 充电并在按住鼠标键的同时释放能量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58311967/

10-11 20:45