Циклический выбор объектов пользовательского интерфейса

Страница обновлена :
Дата создания страницы :

Проверочная среда

Виндоус
  • Windows 11
Редактор Unity
  • 2020.3.25ф1

Необходимые условия для получения этого совета

Следующие настройки были сделаны заранее в качестве предварительного условия для объяснения этих советов.

ссылка

Развертывание примеров объектов пользовательского интерфейса

Разместите кнопку на холсте следующим образом: Выбранный объект отображается зеленым цветом для наглядности.

Можно выбирать только те объекты, которые находятся в выбранном направлении.

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

Однако в макете, похожем на меню, по умолчанию невозможно выполнить операцию цикла выбора, такую как «возврат наверх при нажатии вниз, когда выбран низ».

На рисунке выше вы не можете выбрать кнопку Button1, нажав нажатой клавишу Button3. Конечно, если вы нажмете вверх при выбранной кнопке Button1, вы не сможете выбрать Button3.

Циклический перебор выделений

Здесь мы создадим механизм, который позволит вам бесконечно перебирать выборки. В образце макета можно выбрать Button1, нажав кнопку Button3, когда выбрана кнопка Button3, и выбрать Button3, нажав вверх, когда выбрана Button1.

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

  • Двигаться вверх и вниз можно только в одном направлении.
  • Распространяется на все Selectable существующие под указанным объектом

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

Создайте сценарий в своем проекте. Вы можете назвать его как угодно, но я оставлю SelectLoop его как .

Скрипт выглядит следующим образом:

using UnityEngine;
using UnityEngine.UI;  // 追加

public class SelectLoop : MonoBehaviour
{
  // 最初のフレーム更新の前に開始が呼び出されます
  void Start()
  {
    // ボタンなど選択可能なコンポーネントを取得する
    var selects = GetComponentsInChildren<Selectable>();
    for (var i = 0; i < selects.Length; i++)
    {
      var nav = selects[i].navigation;
      nav.mode = Navigation.Mode.Explicit;
      nav.selectOnUp = selects[i == 0 ? selects.Length - 1 : i - 1];
      nav.selectOnDown = selects[(i + 1) % selects.Length];
      selects[i].navigation = nav;
    }
  }

  // 更新はフレームごとに1回呼び出されます
  void Update() { }
}

Что мы делаем, так это делаем следующие настройки для поведения navigation выбора ключа.

  • Нажмите клавишу вверх, чтобы выбрать предыдущий объект, и выберите последний объект, чтобы выбрать первый объект.
  • Нажмите клавишу вниз, чтобы выбрать следующий объект, или выберите первый объект, если он является последним.

Кстати, порядок этого объекта (Selectable) зависит от порядка иерархии. Расположите их в том порядке, в котором вы хотите, чтобы они были выбраны в иерархии.

После сохранения скрипта прикрепите его как компонент. Этот скрипт будет применен к присоединенному объекту Selectable , поэтому на этот раз Canvas мы прикрепим к .

Попробуйте переместить его и посмотрите, сможете ли вы перемещать его между кнопками Button1 и Button3 нажатием клавиши.