Зарядил энергию и выпустил ее, пока кнопка мыши удерживается нажатой - PullRequest
1 голос
/ 09 октября 2019

Мне нужно накопить определенное количество энергии и отпустить ее, когда отпущена кнопка мыши. Прямо сейчас, когда уровень энергии достигает максимума, уровень энергии устанавливается на 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, и накопление должно прекратиться, пока кнопка не будет нажата снова.

1 Ответ

3 голосов
/ 10 октября 2019

GetMouseButtonUp возвращает true только для одиночного кадра , который был отпущен кнопкой. Ваш код yields затем.

Давайте пройдемся по нему:

if (Input.GetMouseButton(1) ...

Пользователь отпустил свою мышь, когда он хочет атаковать, так что это неверно.

else {
    yield return null;
}

Таким образом, вы уступаете и ждете следующего кадра. Затем, когда выполнение возобновляется:

if (Input.GetMouseButtonUp(1))

Это неверно, поскольку пользователь отпустил кнопку мыши последний кадр. Вы должны вложить весь этот блок в оператор else над строкой yield return null.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...