Клавишное управление кнопками Меню прокручивается при удержании клавиши Unity C# - PullRequest
0 голосов
/ 08 февраля 2020

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

Мне трудно описать проблему словами, поэтому я прошу прощения, если это звучит странно. И я использую кнопки, чтобы при желании можно было использовать мышь.

1 Ответ

0 голосов
/ 09 февраля 2020

Я изменил параметры навигации на кнопках с Automati c на None, как рекомендовано Hermesis в комментариях, и это устранило проблему. Спасибо за помощь!

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