Bläddra så att det markerade objektet visas högst upp i listan med nedrullningsbara objekt

Sidan uppdaterad :
Datum för skapande av sida :

Miljö för verifiering

Windows
  • Windows 11 (på engelska)
Unity-redigeraren
  • 2020.3.25f1

Förutsättningar för det här tipset

Följande inställningar har gjorts i förväg som en förutsättning för förklaringen av dessa tips.

När listrutan visas visas alltid det översta objektet.

Om antalet nedrullningsbara objekt är större än rullgardinsområdet kommer rullning att visas, Vid den tidpunkten kommer det första objektet som visas alltid att vara objektet högst upp.

Detta gäller även när objektet längst ned är markerat och expanderat.

Vissa personer kanske dock vill att objektet de väljer ska visas högst upp i listan när det expanderas. För att hantera detta måste du konfigurera följande ytterligare inställningar:

Bläddra så att det markerade objektet är högst upp när du expanderar listrutan

Detta görs med hjälp av ett skript. Lägg till ett skript i projektet och ge det namnet , DropdownScroll men namnet är godtyckligt.

När du öppnar skriptredigeraren anger du följande:

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

Innehållet i koden är inte så komplicerat. När listrutan expanderas beräknas rullningspositionen och ställs in så att det valda objektet är överst.

Start Anledningen till att skriva den i metoden är att den förutsätter att initieringsprocessen fungerar varje gång listrutan expanderas.

När du har sparat koden bifogar du skriptet Dropdown Template till .

Temolate Objekten under den genereras när rullgardinsmenyn expanderas efter att spelet har körts. Den anslutna komponenten initieras också vid tidpunkten för distributionen. Dessutom, när listrutan stängs, förstörs det expanderade objektet, Om du distribuerar den igen genereras den igen, så initieringsprocessen körs efter varje distribution.

Låt oss prova.

Som nämnts ovan kommer listrutan som inte har vidtagit någon åtgärd inte att synas även om du expanderar den med objektet nedan markerat. Å andra sidan, om du expanderar rullgardinsmenyn som vi adresserade, kan du se att den rullas till den punkt där du kan se det valda objektet.