Прокрутіть так, щоб вибраний елемент опинився вгорі списку розкривних елементів

Сторінка оновлюється :
Дата створення сторінки :

Середовище верифікації

Вікна
  • Вікна 11
Редактор Unity
  • 2020.3.25f1

Передумови для цієї поради

Наступні налаштування були зроблені заздалегідь як обов'язкова умова для пояснення цих порад.

При відображенні випадаючого списку елементів завжди відображається верхній елемент.

Якщо кількість випадаючих елементів більша за область випадаючого списку, буде показано прокручування, У цей час першим відображуваним елементом завжди буде елемент угорі.

Це також вірно, коли елемент внизу виділений і розгорнутий.

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

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

Це робиться за допомогою скрипта. Додайте скрипт до свого проекту та назвіть його, 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 Об'єкти під ним генеруються, коли випадаюче меню розгортається після виконання гри. Приєднаний компонент також ініціалізується під час розгортання. Також при закритті випадаючого меню розгорнутий об'єкт знищується, Якщо ви розгорнете його знову, він буде згенерований знову, тому процес ініціалізації буде виконуватися після кожного розгортання.

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

Як згадувалося вище, випадаюче меню, яке не виконало жодної дії, не буде видно, навіть якщо ви розгорнете його за допомогою пункту нижче. З іншого боку, якщо розгорнути випадаюче меню, яке ми розглянули, то можна побачити, що воно прокручується до того моменту, коли ви можете побачити обраний елемент.