Posuňte se tak, aby se vybraná položka nacházela v horní části seznamu rozevíracích položek.

Stránky aktualizovány :
Datum vytvoření stránky :

Ověřovací prostředí

Windows
  • Systém Windows 11
Unity Editor
  • 2020.3.25f1

Předpoklady pro tento tip

Následující nastavení byla provedena předem jako předpoklad pro vysvětlení těchto tipů.

Při zobrazení rozevíracího seznamu položek se vždy zobrazí horní položka.

Pokud je počet položek rozevíracího seznamu větší než oblast rozevíracího seznamu, zobrazí se posouvání, V té době bude první zobrazenou položkou vždy položka nahoře.

To platí i v případě, že je položka dole vybrána a rozbalena.

Někteří lidé však mohou chtít, aby položka, kterou vybírají, byla po rozbalení v horní části seznamu. Chcete-li tomu vyhovět, musíte nakonfigurovat následující další nastavení:

Posuňte se tak, aby vybraná položka byla nahoře při rozbalování rozevíracího seznamu

To se provádí skriptem. Přidejte skript do projektu a pojmenujte ho, DropdownScroll ale název je libovolný.

Při otevření Editoru skriptů zadejte následující údaje:

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);
  }
}

Obsah kódu není tak složitý. Když je rozevírací seznam rozbalený, pozice posouvání se vypočítá a nastaví tak, aby vybraná položka byla nahoře.

Start Důvodem pro zápis do metody je to, že předpokládá, že proces inicializace bude fungovat pokaždé, když se rozevírací seznam rozbalí.

Po uložení kódu připojte tento Dropdown Template skript k .

Temolate Objekty pod ním se generují, když se rozbalovací nabídka rozbalí po spuštění hry. Připojená komponenta je také inicializována v době nasazení. Také, když je rozevírací seznam zavřený, rozbalený objekt je zničen, Pokud ho nasadíte znovu, vygeneruje se znovu, takže proces inicializace se spustí po každém nasazení.

Pojďme to zkusit.

Jak bylo uvedeno výše, rozevírací seznam, který neprovedl žádnou akci, nebude viditelný, i když jej rozbalíte s vybranou položkou níže. Na druhou stranu, pokud rozbalíte rozbalovací nabídku, kterou jsme řešili, uvidíte, že se posouvá do bodu, kde vidíte vybranou položku.