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

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

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

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

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

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

При отображении выпадающего списка элементов всегда отображается верхний элемент.

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

Это также верно, когда элемент внизу выбран и развернут.

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

Прокрутите так, чтобы выбранный элемент был вверху при развертывании выпадающего списка

Это делается скриптом. Добавьте скрипт в свой проект и назовите его , DropdownScroll но имя произвольное.

При открытии редактора сценариев введите следующее:

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

public class DropdownScroll : MonoBehaviour
{
  public void Start()
  {
    // スクロールの計算に必要な各コンポーネントを取得
    var dropdown = GetComponentInParent<Dropdown>();
    var scrollRect = gameObject.GetComponent<ScrollRect>();
    var viewport = transform.Find("Viewport").GetComponent<RectTransform>();
    var contentArea = transform.Find("Viewport/Content").GetComponent<RectTransform>();
    var contentItem = transform.Find("Viewport/Content/Item").GetComponent<RectTransform>();

    // 選択しているアイテムの位置や表示領域をもとに選択アイテムまでスクロールすべき量を計算する
    var areaHeight = contentArea.rect.height - viewport.rect.height;
    var cellHeight = contentItem.rect.height;
    var scrollRatio = (cellHeight * dropdown.value) / areaHeight;
    scrollRect.verticalNormalizedPosition = 1.0f - Mathf.Clamp(scrollRatio, 0.0f, 1.0f);
  }
}

Содержание кода не так уж и сложно. При раскрытии раскрывающегося списка вычисляется и устанавливается положение прокрутки так, чтобы выбранный элемент находился вверху.

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

После сохранения кода прикрепите этот Dropdown Template скрипт к .

Temolate Объекты под ним генерируются при раскрытии выпадающего списка после запуска игры. Присоединенный компонент также инициализируется во время развертывания. Также при закрытии выпадающего списка развернутый объект уничтожается, Если вы развернете его снова, он будет сгенерирован снова, поэтому процесс инициализации будет выполняться после каждого развертывания.

Давайте попробуем.

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