Percorrer a seleção de objetos da interface do usuário

Página atualizada :
Data de criação de página :

Ambiente de verificação

Windows
  • Janelas 11
Unity Editor
  • 25.3.2020F1

Pré-requisitos para esta dica

As configurações a seguir foram feitas com antecedência como pré-requisito para a explicação dessas dicas.

referência

Implantando objetos de interface do usuário de exemplo

Coloque o botão na tela da seguinte maneira: O objeto selecionado é exibido em verde para maior clareza.

Você só pode selecionar objetos que estão na direção selecionada.

Ao colocar um objeto de interface do usuário, você pode pressionar inicialmente as teclas de seta em um teclado ou gamepad para selecionar o objeto de interface do usuário na direção especificada. Isso é muito intuitivo e fácil de entender, então não acho que você precise se preocupar em alterar as configurações.

No entanto, em um layout semelhante a um menu, não é possível executar uma operação de loop de seleção como "retornar ao topo quando você pressiona para baixo enquanto a parte inferior está selecionada" por padrão.

Na figura acima, você não pode selecionar Button1 pressionando enquanto Button3 está selecionado. Claro, se você pressionar para cima enquanto Button1 está selecionado, você não será capaz de selecionar Button3.

Percorrer seleções em loop

Aqui, criaremos um mecanismo que permite percorrer as seleções infinitamente. No layout de exemplo, você pode selecionar Button1 pressionando enquanto Button3 está selecionado, e você pode selecionar Button3 pressionando para cima enquanto Button1 está selecionado.

Esse controle é feito em um script. É um script de uso geral que pode ser usado com um pequeno número de descrições e pode ser usado como em outras cenas. Em vez disso, aplicam-se as seguintes restrições:

  • Você só pode se mover para cima e para baixo em uma direção.
  • Aplica-se a todos os Selectable existentes no objeto especificado

Portanto, o destino de uso é limitado aos menus que são selecionados rolando para cima e para baixo, mas é muito útil se você se limitar a esse layout. A propósito, ele é limitado à parte superior e inferior, mas se você modificar um pouco o script, você pode torná-lo limitado à esquerda e à direita.

Crie um script em seu projeto. Você pode nomeá-lo qualquer coisa, mas eu vou SelectLoop deixá-lo como .

O script tem a seguinte aparência:

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() { }
}

O que estamos fazendo é fazer as seguintes configurações para o comportamento navigation de seleção de chaves.

  • Pressione a tecla para cima para selecionar o objeto anterior e selecione o último objeto para selecionar o primeiro objeto.
  • Pressione a tecla para baixo para selecionar o próximo objeto ou selecione o primeiro objeto se for o último.

A propósito, a ordem desse objeto (Selecionável) depende da ordem da hierarquia. Organize-os na ordem em que você deseja que eles sejam selecionados na hierarquia.

Depois de salvar o script, anexe-o como um componente. Este script será aplicado no objeto Selectable anexado, então desta vez Canvas vamos anexar ao .

Tente movê-lo e ver se você pode movê-lo entre Button1 e Button3 com um pressionamento de tecla.