Recorrer en bucle la selección de objetos de la interfaz de usuario

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.

referencia

Implementación de objetos de IU de ejemplo

Coloque el botón en el lienzo de la siguiente manera: El objeto seleccionado se muestra en verde para mayor claridad.

Solo puede seleccionar objetos que estén en la dirección seleccionada.

Al colocar un objeto de interfaz de usuario, puede presionar inicialmente las teclas de dirección de un teclado o controlador para juegos para seleccionar el objeto de interfaz de usuario en la dirección especificada. Esto es muy intuitivo y fácil de entender, por lo que no creo que sea necesario molestarse en cambiar la configuración.

Sin embargo, en un diseño similar a un menú, no es posible realizar una operación de bucle de selección como "volver a la parte superior cuando se presiona hacia abajo mientras la parte inferior está seleccionada" de forma predeterminada.

En la figura anterior, no puede seleccionar Button1 presionando hacia abajo mientras Button3 está seleccionado. Por supuesto, si presiona hacia arriba mientras Button1 está seleccionado, no podrá seleccionar Button3.

Recorrer las selecciones en bucle

Aquí, crearemos un mecanismo que le permita recorrer las selecciones sin fin. En el diseño de ejemplo, puede seleccionar Button1 presionando hacia abajo mientras Button3 está seleccionado, y puede seleccionar Button3 presionando hacia arriba mientras Button1 está seleccionado.

Este control se realiza en un script. Es un guión de propósito general que se puede usar con un pequeño número de descripciones y se puede usar como en otras escenas. En su lugar, se aplican las siguientes restricciones:

  • Solo puedes moverte hacia arriba y hacia abajo en una dirección.
  • Se aplica a todos los Selectable existentes en el objeto especificado

Por lo tanto, el objetivo de uso se limita a los menús que se seleccionan desplazándose hacia arriba y hacia abajo, pero es muy útil si se limita a ese diseño. Por cierto, está limitado a la parte superior e inferior, pero si modificas un poco el script, puedes limitarlo a la izquierda y a la derecha.

Cree un script en el proyecto. Puedes ponerle cualquier nombre, pero lo dejaré SelectLoop como .

El script tiene el siguiente aspecto:

using UnityEngine;
using UnityEngine.UI;  // 追加

public class SelectLoop : MonoBehaviour
{
  // 最初のフレーム更新の前に開始が呼び出されます
  void Start()
  {
    // ボタンなど選択可能なコンポーネントを取得する
    var selects = GetComponentsInChildren<Selectable>();
    for (var i = 0; i < selects.Length; i++)
    {
      var nav = selects[i].navigation;
      nav.mode = Navigation.Mode.Explicit;
      nav.selectOnUp = selects[i == 0 ? selects.Length - 1 : i - 1];
      nav.selectOnDown = selects[(i + 1) % selects.Length];
      selects[i].navigation = nav;
    }
  }

  // 更新はフレームごとに1回呼び出されます
  void Update() { }
}

Lo que estamos haciendo es realizar los siguientes ajustes para el comportamiento navigation de selección de teclas.

  • Presione la tecla arriba para seleccionar el objeto anterior y seleccione el último objeto para seleccionar el primer objeto.
  • Presione la tecla hacia abajo para seleccionar el siguiente objeto, o seleccione el primer objeto si es el último objeto.

Por cierto, el orden de este objeto (Seleccionable) depende del orden de la jerarquía. Organícelos en el orden en que desea que se seleccionen en la jerarquía.

Después de guardar el script, adjúntelo como un componente. Este script se aplicará en el objeto Selectable adjunto , por lo que esta vez Canvas lo adjuntaremos a .

Intente moverlo y vea si puede moverlo entre Button1 y Button3 con solo presionar una tecla.