Есть некоторые проблемы с этим кодом.
Тот факт, что вы звоните Update
, каждый кадр не помогает. В основном Play
либо Stop
будет называться ужасно много, и вызов может быть очень дорогим.
Я не Unity
эксперт, но я повторюсь, у вас будут некоторые обработчики событий для ключа нажимает вверх и вниз - тем не менее, я постараюсь придерживаться вашего подхода.
Примечание: код псевдо
Итак, я попытаюсь найти это, но я ожидал чего-то как это:
bool IsMovementAudioPlaying = false;
// Update is called once per frame
void Update()
{
//similar for A
if (Input.GetKey(KeyCode.D) && !IsMovementAudioPlaying )
{
IsMovementAudioPlaying = true;
GetComponent<AudioSource>().Play();
}
//similar for A, you can use different sounds if you want
else if (IsMovementAudioPlaying)
{
IsMovementAudioPlaying = false;
GetComponent<AudioSource>().Stop();
}
}
Вам нужно немного поиграть с ним, чтобы получить лог c права на поддержку обоих ключей.
Основная идея здесь заключается в том, что вы отслеживаете action
, который должен быть выполнен, и сделать это один раз, только если это необходимо.
Вы также можете переписать эту концепцию, чтобы применить ее в рендере l oop, но обычно события помогают вам структурировать это лучше.