我需要累积一定量的能量,然后在释放鼠标按钮时释放它。现在,当能量级别达到最大值时,能量级别将设置为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/