Как использовать GetKeyDown (), чтобы эффективно определять, когда какой-либо ключ выпускается - PullRequest
0 голосов
/ 10 февраля 2019

Я начну с того, что я очень плохо знаком с C # и Unity, поэтому заранее прошу прощения, если мне не хватает того, что считается общеизвестным.Кроме того, я проверил другие вопросы здесь и не нашел ответов, которые бы решали мою конкретную проблему.Однако, если он есть, я был бы признателен за указание на него.

В любом случае, я пытаюсь написать код, который будет воспроизводить звук, когда клавиша удерживается нажатой, и прекратит воспроизведение, когда клавиша отпущена.Разные клавиши будут воспроизводить разные звуки, поэтому функция GetKeyUp () должна применяться к любой клавише, которая нажата в данный момент.

Я объявил строку для inputKey, и inputKey назначается любой клавише, которая нажимается, и затемпередается в оператор if, содержащий функцию GetKeyUp ().Я пробовал многочисленные небольшие варианты этого метода, но тот, который я сейчас использую, был единственным способом, который не привел к сообщению об ошибке (хотя код все еще не работает)

public string inputKey;

else if (Input.GetKeyDown(KeyCode.S))
    {
        freq = 293.66;
        gain = volume;
    }

inputKey = (Input.inputString).ToUpper();

if (Input.GetKeyUp(KeyCode.inputKey));
    {
        gain = 0;
    }

Так что вВ приведенном выше примере при нажатии клавиши S воспроизводится звук.InputKey отображается как 'S', поэтому я ожидал бы, что Input.GetKeyUp (KeyCode.inputKey) 'будет эквивалентен' Input.GetKeyUp (KeyCode.S 'и звуку, который нужно остановить, но это не так)и звук продолжает играть.

Любая помощь или совет будет принята с благодарностью, спасибо.

1 Ответ

0 голосов
/ 10 февраля 2019

Вместо этого я бы использовал Input.GetKey().

Вместо проверки "is S down? Начать воспроизведение звука S. Будет ли A down? Начать воспроизведение звука AБыла ли отпущена какая-либо клавиша? Какая это была клавиша? Остановить воспроизведение этого звука? "Я бы просто проверил текущее состояние каждой клавиши и запустил или остановил звук на основе этого состояния.

Например1012 *

soundOnS.gain = Input.GetKey(KeyCode.S) ? volume : 0;

Ваш нынешний подход не может и никогда не сможет адекватно справиться с тем, что происходит, если кто-то нажимает одновременно на несколько клавиш: когда они поднимают один палец, отпускают одну клавишу (но не другую!) какой звук должен играть?

...