Desplácese para que el elemento seleccionado esté en la parte superior de la lista de elementos desplegables

Actualización de la página :
Fecha de creación de la página :

Entorno de verificación

Windows
  • Windows 11
Unity Editor
  • 2020.3.25f1

Requisitos previos para esta sugerencia

Los siguientes ajustes se han realizado de antemano como requisito previo para la explicación de estos consejos.

Al mostrar la lista de elementos desplegables, siempre se muestra el elemento superior.

Si el número de elementos desplegables es mayor que el área desplegable, se mostrará el desplazamiento, En ese momento, el primer elemento que se muestra siempre será el elemento en la parte superior.

Esto también es cierto cuando el elemento de la parte inferior está seleccionado y expandido.

Sin embargo, algunas personas pueden querer que el elemento que están seleccionando esté en la parte superior de la lista cuando se expande. Para dar cabida a esto, debe configurar las siguientes opciones adicionales:

Desplácese para que el elemento seleccionado esté en la parte superior al expandir el menú desplegable

Esto se hace mediante un script. Agregue un script a su proyecto y asígnele un nombre, DropdownScroll pero el nombre es arbitrario.

Al abrir el Editor de scripts, introduzca lo siguiente:

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

El contenido del código no es tan complicado. Cuando se expande el menú desplegable, la posición de desplazamiento se calcula y se establece para que el elemento seleccionado esté en la parte superior.

Start La razón para escribirlo en el método es porque asume que el proceso de inicialización funcionará cada vez que se expanda el menú desplegable.

Después de guardar el código, adjunte este Dropdown Template script a .

Temolate Los objetos debajo de él se generan cuando el menú desplegable se expande después de que se ejecuta el juego. El componente adjunto también se inicializa en el momento de la implementación. Además, cuando se cierra el menú desplegable, se destruye el objeto expandido, Si lo implementa de nuevo, se generará nuevamente, por lo que el proceso de inicialización se ejecutará después de cada implementación.

Vamos a intentarlo.

Como se mencionó anteriormente, el menú desplegable que no ha realizado ninguna acción no será visible incluso si lo expande con el elemento a continuación seleccionado. Por otro lado, si expandes el desplegable que hemos abordado, puedes ver que se desplaza hasta el punto en el que puedes ver el elemento seleccionado.