Posuňte sa tak, aby sa vybratá položka nachádzala v hornej časti zoznamu rozbaľovacích položiek

Stránka aktualizovaná :
Dátum vytvorenia strany :

Prostredie overovania

Windows
  • Windows 11
Editor jednoty
  • 2020.3.25f1

Predpoklady pre tento tip

Nasledujúce nastavenia boli vykonané vopred ako predpoklad pre vysvetlenie týchto tipov.

Pri zobrazení rozbaľovacieho zoznamu položiek sa vždy zobrazí prvá položka.

Ak je počet rozbaľovacích položiek väčší ako rozbaľovacia oblasť, zobrazí sa posúvanie, V tom čase bude prvá zobrazená položka vždy položka v hornej časti.

Platí to aj vtedy, keď je položka v dolnej časti vybratá a rozbalená.

Niektorí používatelia však môžu chcieť, aby položka, ktorú vyberajú, bola po rozbalení na začiatku zoznamu. Ak sa tomu chcete prispôsobiť, musíte nakonfigurovať nasledujúce ďalšie nastavenia:

Posuňte sa tak, aby sa vybratá položka pri rozbaľovaní rozbaľovacieho zoznamu nachádzala hore

To sa vykonáva pomocou skriptu. Pridajte do projektu skript a pomenujte ho , DropdownScroll ale názov je ľubovoľný.

Keď otvoríte Script Editor, zadajte nasledovné:

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 nie je taký zložitý. Po rozbalení rozbaľovacej ponuky sa rolovacia pozícia vypočíta a nastaví tak, aby vybratá položka bola hore.

Start Dôvodom jeho napísania v metóde je to, že predpokladá, že proces inicializácie bude fungovať pri každom rozšírení rozbaľovacej ponuky.

Po uložení kódu priložte tento Dropdown Template skript k súboru .

Temolate Objekty pod ním sa generujú, keď sa rozbaľovacia ponuka rozbalí po spustení hry. Pripojený komponent sa tiež inicializuje v čase nasadenia. Keď je rozbaľovacia ponuka zatvorená, rozšírený objekt sa tiež zničí, Ak ho nasadíte znova, vygeneruje sa znova, takže proces inicializácie sa vykoná po každom nasadení.

Poďme to skúsiť.

Ako je uvedené vyššie, rozbaľovacia ponuka, ktorá nevykonala žiadnu akciu, nebude viditeľná ani v prípade, že ju rozbalíte s vybratou položkou nižšie. Na druhej strane, ak rozbalíte rozbaľovaciu ponuku, ktorú sme riešili, môžete vidieť, že je posunutá do bodu, kde môžete vidieť vybranú položku.