Ritiniet tā, lai atlasītais vienums atrastos nolaižamo vienumu saraksta augšdaļā

Lapa atjaunota :
Lapas izveides datums :

Verifikācijas vide

Windows
  • Operētājsistēmā Windows 11
Vienotības redaktors
  • 2020.3.25f1

Priekšnoteikumi šim padomam

Tālāk norādītie iestatījumi ir veikti iepriekš kā priekšnoteikums šo padomu izskaidrošanai.

Parādot nolaižamo vienumu sarakstu, vienmēr tiek parādīts augšējais vienums.

Ja nolaižamo vienumu skaits ir lielāks par nolaižamo apgabalu, tiks parādīta ritināšana, Tajā laikā pirmais parādītais vienums vienmēr būs vienums augšpusē.

Tas attiecas arī uz gadījumiem, kad ir atlasīts un izvērsts vienums apakšā.

Tomēr daži lietotāji var vēlēties, lai vienums, ko viņi atlasa saraksta augšdaļā, kad tas tiek izvērsts. Lai to pielāgotu, jums jākonfigurē šādi papildu iestatījumi:

Ritiniet tā, lai, izvēršot nolaižamo izvēlni, atlasītais vienums atrastos augšpusē

Tas tiek darīts ar skriptu. Pievienojiet skriptu savam projektam un nosauciet to , DropdownScroll bet nosaukums ir patvaļīgs.

Atverot skriptu redaktoru, ievadiet:

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

Koda saturs nav tik sarežģīts. Kad nolaižamā izvēlne ir izvērsta, ritināšanas pozīcija tiek aprēķināta un iestatīta tā, lai atlasītais vienums atrastos augšpusē.

Start Iemesls, kāpēc to rakstīt metodē, ir tāpēc, ka tiek pieņemts, ka inicializācijas process darbosies katru reizi, kad tiek paplašināta nolaižamā izvēlne.

Pēc koda saglabāšanas pievienojiet šo Dropdown Template skriptu .

Temolate Objekti, kas atrodas zem tā, tiek ģenerēti, kad nolaižamā izvēlne tiek paplašināta pēc spēles izpildes. Pievienotais komponents tiek inicializēts arī izvietošanas laikā. Arī tad, kad nolaižamais saraksts ir aizvērts, paplašinātais objekts tiek iznīcināts, Ja to izvietosit vēlreiz, tas tiks ģenerēts vēlreiz, tāpēc inicializācijas process tiks izpildīts pēc katras izvietošanas.

Pamēģināsim.

Kā minēts iepriekš, nolaižamā izvēlne, kas nav veikusi nekādas darbības, nebūs redzama pat tad, ja to paplašināsit ar atlasīto vienumu. No otras puses, ja izvēršat nolaižamo izvēlni, kuru mēs uzrunājām, jūs varat redzēt, ka tas ir ritināts līdz vietai, kur var redzēt atlasīto vienumu.