Defilați astfel încât elementul selectat să se afle în partea de sus a listei de elemente verticale

Pagina actualizată :
Data creării paginii :

Mediul de verificare

Windows
  • Ferestre 11
Unity Editor
  • 2020.3.25F1

Cerințe preliminare pentru acest sfat

Următoarele setări au fost făcute în avans ca o condiție prealabilă pentru explicarea acestor sfaturi.

Când se afișează lista verticală de elemente, elementul de sus este întotdeauna afișat.

Dacă numărul de elemente derulante este mai mare decât zona derulantă, va fi afișată derularea, În acel moment, primul element afișat va fi întotdeauna elementul din partea de sus.

Acest lucru este valabil și atunci când elementul din partea de jos este selectat și extins.

Cu toate acestea, este posibil ca unele persoane să dorească elementul pe care îl selectează în partea de sus a listei atunci când este extins. Pentru a face acest lucru, trebuie să configurați următoarele setări suplimentare:

Derulați astfel încât elementul selectat să fie în partea de sus atunci când extindeți meniul vertical

Acest lucru se face printr-un script. Adăugați un script la proiectul dvs. și denumiți-l , DropdownScroll dar numele este arbitrar.

Când deschideți Editor scripturi, introduceți următoarele:

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

Conținutul codului nu este atât de complicat. Când meniul derulant este extins, poziția de derulare este calculată și setată astfel încât elementul selectat să fie în partea de sus.

Start Motivul pentru scrierea acestuia în metodă se datorează faptului că presupune că procesul de inițializare va funcționa de fiecare dată când meniul derulant este extins.

După ce salvați codul, atașați acest Dropdown Template script la .

Temolate Obiectele de sub el sunt generate atunci când meniul derulant este extins după executarea jocului. Componenta atașată este, de asemenea, inițializată în momentul implementării. De asemenea, atunci când meniul derulant este închis, obiectul extins este distrus, Dacă îl implementați din nou, acesta va fi generat din nou, astfel încât procesul de inițializare va fi executat după fiecare implementare.

Să încercăm.

După cum sa menționat mai sus, meniul derulant care nu a întreprins nicio acțiune nu va fi vizibil, chiar dacă îl extindeți cu elementul de mai jos selectat. Pe de altă parte, dacă extindeți meniul derulant pe care l-am abordat, puteți vedea că acesta este derulat până la punctul în care puteți vedea elementul selectat.