滾動以使所選項目位於下拉專案清單的頂部

更新頁 :
頁面創建日期 :

驗證環境

窗戶
  • 窗戶11
Unity 編輯器
  • 2020.3.25f1

此提示的先決條件

作為解釋這些提示的先決條件,已預先進行了以下設置。

顯示下拉專案清單時,始終顯示頂部專案。

如果下拉項的數量大於下拉區域,將顯示滾動, 屆時,顯示的第一個專案將始終是頂部的專案。

當選擇並展開底部的專案時也是如此。

但是,有些人可能希望在展開時將他們選擇的專案放在清單頂部。 為此,您需要設定以下附加設定:

滾動,使所選項目在展開下拉清單時位於頂部

這是由腳本完成的。 將文稿添加到您的專案中並命名它, DropdownScroll 但名稱是任意的。

開啟文稿編輯器時,輸入以下內容:

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

代碼的內容並不複雜。 展開下拉清單時,將計算並設置滾動位置,使所選項目位於頂部。

Start 在方法中編寫它的原因是,它假定每次展開下拉清單時,初始化過程都會起作用。

儲存代碼後,將此DropdownTemplate文稿附加到 。

Temolate 它下面的物件是在遊戲執行後展開下拉清單時生成的。 附加的元件也會在部署時初始化。 此外,當下拉清單關閉時,展開的物件將被銷毀, 如果再次部署,它將再次生成,因此每次部署後都會執行初始化過程。

讓我們試試吧。

如上所述,即使您在選擇以下項目的情況下展開未執行任何操作的下拉清單,也不會顯示該下拉清單。 另一方面,如果展開我們解決的下拉清單,您可以看到它已滾動到可以看到所選項目的點。