У меня есть пошаговая боевая система, в которой игрок может прокручивать список кнопок с помощью клавиш вверх и вниз. Нажатие на одну из этих клавиш изменяет целое число selectedIndex для сохранения последнего выбора, если игрок покидает меню. Это работает почти так, как задумано, нажатие вниз выбирает кнопку под током и циклически переходит наверх, если игрок достигает дна; однако, когда игрок удерживает клавиши «вниз» или «вверх», кнопки быстро переключаются в этом направлении без изменения selectedIndex, поэтому, если игрок выбирает новую кнопку, выбранная кнопка полностью переходит к выбранным кнопкам пропуска индекса.
Например, допустим, выбранный индекс равен 0, первая кнопка подсвечивается. Если игрок нажимает вниз, вторая кнопка подсвечивается и выбранный индекс равен 1. Если он нажимает и удерживает нажатой клавишу «вниз», выбранный индекс становится 2, а третья кнопка подсвечивается на мгновение, но затем 4-й, 5-й и 6-й являются выделены в последовательности. SelectedIndex остается 2, поэтому, если игрок нажимает снова, выбранный индекс становится 3, а 4-я кнопка становится выбранной, даже если игрок был на шестом, и они нажимают вниз.
Трудно описать, не показывая его, но вот соответствующий код контроллера:
else if (Input.GetKeyDown(KeyCode.UpArrow) || Input.GetKeyDown(KeyCode.W))
{
menu.PrevB();
}
else if (Input.GetKeyDown(KeyCode.DownArrow) || Input.GetKeyDown(KeyCode.S))
{
menu.NextB();
Debug.Log(menu.selectedIndex);
}
И код выбора кнопки:
public void NextB()
{
selectedIndex++;
if (selectedIndex >= attackButtons.Count)
selectedIndex = 0;
attackButtons[selectedIndex].Select();
}
public void PrevB()
{
selectedIndex--;
if (selectedIndex < 0)
selectedIndex = attackButtons.Count - 1;
attackButtons[selectedIndex].Select();
}
Я хотел бы реализовать клавишу удержания для быстрого перемещения по списку кнопок в будущем, но я еще не так, я запутался: почему кнопки быстро выбираются, когда клавиша удерживается без изменения выбранного индекса, что может вызывать button.Select (), когда это единственное использование во всех моих сценариях, и почему эта «автоматическая прокрутка» происходит в том же направлении, даже если клавиши «вверх» и «вниз» меняются местами (т. е. если upArrow вызывает следующую кнопку, нажатие одной кнопки будет циклически уменьшаться, а удержание будет автоматически прокручиваться вверх).
Мне трудно описать проблему словами, поэтому я прошу прощения, если это звучит странно. И я использую кнопки, чтобы при желании можно было использовать мышь.