我需要积累一定的能量并在松开鼠标按钮时释放它。现在,当能量水平达到最大值时,能量水平被设置为 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;
}
}
我需要在按住按钮时积累能量。当按钮为 Up 时,能量应在充电阶段达到最大值时释放,能量水平应返回 0 并停止累积,直到再次按下按钮。
GetMouseButtonUp
仅在释放按钮的单帧 上返回 true。然后您的代码yield
。
让我们走一遍:
if (Input.GetMouseButton(1) ...
用户为了攻击而松开了鼠标,所以这是错误的。
else {
yield return null;
}
所以你屈服并等待下一帧。然后当执行恢复时:
if (Input.GetMouseButtonUp(1))
这是错误的,因为用户在最后 帧释放了鼠标按钮。您应该将整个 block 嵌套在 yield return null
行的 else 语句中。
我是一名优秀的程序员,十分优秀!