Recorrer en bucle la selección de objetos de la interfaz de usuario
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.