Всем привет! Добро пожаловать на 10-ю неделю. Двузначное число… фу.

На прошлой неделе я планировал закончить значительную часть прототипа, но застрял на другом, не менее важном — пользовательском интерфейсе.

Игрокам придется взаимодействовать с различными элементами пользовательского интерфейса, которые появляются и исчезают во время игры. И система пользовательского интерфейса, которая у меня была на прошлой неделе, почти не работала и создавала много помех. Я никак не мог продолжить разработку, не исправив пользовательский интерфейс. Так вот чем я занимался…

TLDR:

  1. Я работал над кучей вещей, связанных с пользовательским интерфейсом, и провел рефакторинг кода.
  2. Я позаботился о том, чтобы управление пользовательским интерфейсом всегда можно было выполнять только с клавиатуры.
  3. Отключено сопоставление клавиш движения (WASD) с навигации по пользовательскому интерфейсу для игрового процесса.
  4. Начал внедрять улучшенный рабочий процесс и документацию с помощью FigJam.

Итак, начнем.

Проблема пользовательского интерфейса 1: управление только с клавиатуры

Играя на компьютере, вы можете, конечно, использовать мышь, чтобы нажимать на кнопки. Но я должен был помнить и об игровых консолях. В остальном игра не требует мыши. Поэтому использовать его только для взаимодействия с пользовательским интерфейсом было неправильно.

Хорошо то, что пользовательский интерфейс Unity хорошо визуализирует, как фокус будет смещаться с одной кнопки на другую. Даже при перестановке стрелки по большей части будут обновляться логически. Это позволяет игрокам нажимать разные кнопки и легко выбирать нужную. Проблема заключалась в том, что для этого кнопка должна была сначала находиться в состоянии фокуса.

Вы можете добавить кнопку в поле «First Selected» в компоненте Event System. Но это не помогло бы, так как у меня было несколько групп кнопок управления, которые появлялись по одной, и для каждого набора я должен был иметь кнопку в фокусе.

К счастью, решение оказалось простым. Я не знал этого раньше, но знаете ли вы, что кнопка пользовательского интерфейса имеет функцию выбора?

UIButton.Select();

Сама кнопка не срабатывает; просто сфокусируйтесь. Поэтому, когда вы нажимаете клавишу «Ввод», кнопка активируется.

Таким образом, я мог бы легко установить кнопку по умолчанию для каждой группы кнопок в пользовательском интерфейсе и использовать клавиатуру для навигации по ним.

Проблема пользовательского интерфейса 2: не позволяйте клавишам WASD управлять пользовательским интерфейсом

У меня было странное требование в игре. Как я настроил, игрок сможет перемещать персонажа с помощью клавиш W, A, S, D (вверх, влево, вниз и вправо). Игроки также могут вызывать всплывающее окно пользовательского интерфейса кнопок в любое время, когда они хотят переключаться между различными командами (например, четыре кнопки на изображении выше). Способ навигации по нему был, конечно, с помощью клавиш со стрелками. Но способ Unity настроен, вы также можете перемещаться по ним с помощью клавиш WASD.

Теперь, как правило, это не будет проблемой. Наличие одной и той же функции у клавиш со стрелками и WASD — это хорошо и дает игрокам достаточную гибкость в том, как они хотят взаимодействовать. Но в моем случае игрок должен получить доступ к всплывающему окну пользовательского интерфейса, а также перемещаться. Это означало, что игроки будут взаимодействовать с пользовательским интерфейсом, когда они просто хотят двигаться вперед. Это не работало хорошо.

Я пытался изменить отображение навигации по пользовательскому интерфейсу, но не знал, как это сделать. Именно тогда я узнал, что новая система ввода Unity поставляется со своим собственным «Активом действия ввода», в котором элементы управления пользовательским интерфейсом сопоставлены с клавиатурой, джойстиками и геймпадами.

К сожалению, это не редактируется.

Но, к счастью, я мог просто скопировать сопоставления пользовательского интерфейса для разных устройств из объекта "Действие ввода по умолчанию" в тот, который я создал, и все заработало.

Сделав это, я перешел в EventSystem → Input System UI Input Module и заменил все действия ввода со значения по умолчанию на то, которое я сделал. Я удалил все сопоставления навигации пользовательского интерфейса, сделанные с клавишами WASD, и вуаля… все заработало, как я и предполагал.

Проблема пользовательского интерфейса № 3. Сделайте так, чтобы кнопка пользовательского интерфейса плавала над нужным игровым активом.

В настоящее время кнопки пользовательского интерфейса отображаются в центре экрана. Его положение относительно фиксировано. Но я хочу, чтобы некоторые контекстные параметры отображались над нужным игровым активом и оставались на месте. Мне еще предстоит разобраться в этом вопросе.

Другие вещи

Все это время я использовал Кодеки для управления своим проектом. Но я обнаружил, что это ограничивает и бесполезно мешает мне. Поэтому я решил попробовать использовать онлайн-инструмент доски. На этот раз я выбрал FigJam… Просто приятнее, когда у тебя есть большая доска для работы. Я только что настроил его и дам вам знать, как он работает для меня через пару недель.

Следующий шаг

У меня есть моя работа вырезана для меня. До сих пор все шло отлично. У меня есть несколько новых идей для визуального стиля игры, и мне не терпится поработать над ними. Но эта неделя посвящена основам. Я закончу пользовательский интерфейс и оставшуюся работу. Тогда я буду готов к хорошим вещам.

Это все на этой неделе. Увидимся в следующий раз.

Я желаю вам очень хорошо!

Первоначально опубликовано на https://www.theearlyowl.com 25 октября 2021 г.