Seçili öğe, açılan öğeler listesinin en üstünde olacak şekilde kaydırın

Sayfa güncel :
Sayfa oluşturma tarihi :

Doğrulama ortamı

Windows
  • pencereler 11
Unity Düzenleyicisi
  • 2020.3.25f1

Bu ipucu için önkoşullar

Bu ipuçlarının açıklanması için ön koşul olarak aşağıdaki ayarlar önceden yapılmıştır.

Açılır öğe listesini görüntülerken, her zaman en üstteki öğe görüntülenir.

Açılır öğelerin sayısı açılır alandan büyükse, kaydırma görüntülenecektir, O zaman, görüntülenen ilk öğe her zaman en üstteki öğe olacaktır.

Bu, alttaki öğe seçildiğinde ve genişletildiğinde de geçerlidir.

Ancak, bazı kişiler seçtikleri öğenin genişletildiğinde listenin en üstünde olmasını isteyebilir. Buna uyum sağlamak için aşağıdaki ek ayarları yapılandırmanız gerekir:

Açılır menüyü genişletirken seçili öğe en üstte olacak şekilde kaydırın

Bu bir komut dosyası tarafından yapılır. Projenize bir komut dosyası ekleyin ve adlandırın , DropdownScroll ancak ad isteğe bağlıdır.

Komut Dosyası Düzenleyicisi'ni açtığınızda aşağıdakileri girin:

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

Kodun içeriği o kadar karmaşık değil. Açılır menü genişletildiğinde, kaydırma konumu hesaplanır ve seçilen öğe en üstte olacak şekilde ayarlanır.

Start Yöntemde yazmanın nedeni, açılır menü her genişletildiğinde başlatma işleminin çalışacağını varsaymasıdır.

Kodu kaydettikten sonra bu Dropdown Template komut dosyasını öğesine ekleyin.

Temolate Altındaki nesneler, oyun yürütüldükten sonra açılır menü genişletildiğinde oluşturulur. Eklenen bileşen de dağıtım sırasında başlatılır. Ayrıca, açılır menü kapatıldığında, genişletilmiş nesne yok edilir, Yeniden dağıtırsanız, yeniden oluşturulur, bu nedenle başlatma işlemi her dağıtımdan sonra yürütülür.

Hadi deneyelim.

Yukarıda belirtildiği gibi, herhangi bir işlem yapılmamış olan açılır menü, aşağıdaki öğe seçiliyken genişletseniz bile görünmeyecektir. Öte yandan, ele aldığımız açılır menüyü genişletirseniz, seçilen öğeyi görebileceğiniz noktaya kaydırıldığını görebilirsiniz.