Doorloop de selectie van UI-objecten

Pagina bijgewerkt :
Aanmaakdatum van pagina :

Verificatie omgeving

Ramen
  • Vensters 11
Unity-editor
  • 2020.3.25f1

Vereisten voor deze tip

De volgende instellingen zijn vooraf gemaakt als voorwaarde voor de uitleg van deze tips.

referentie

Voorbeeld-UI-objecten implementeren

Plaats de knop als volgt op het canvas: Het geselecteerde object wordt voor de duidelijkheid groen weergegeven.

U kunt alleen objecten selecteren die zich in de geselecteerde richting bevinden.

Wanneer u een UI-object plaatst, kunt u in eerste instantie op de pijltoetsen op een toetsenbord of gamepad drukken om het UI-object in de opgegeven richting te selecteren. Dit is zeer intuïtief en gemakkelijk te begrijpen, dus ik denk niet dat je de moeite hoeft te nemen om de instellingen te wijzigen.

In een menu-achtige lay-out is het echter niet mogelijk om standaard een selectielusbewerking uit te voeren, zoals "keer terug naar boven wanneer u naar beneden drukt terwijl de onderkant is geselecteerd".

In de bovenstaande afbeelding kunt u Knop1 niet selecteren door ingedrukt te houden terwijl Knop3 is geselecteerd. Als u omhoog drukt terwijl Knop1 is geselecteerd, kunt u Knop3 natuurlijk niet selecteren.

Selecties doorlopen

Hier zullen we een mechanisme maken waarmee je eindeloos door de selecties kunt lussen. In de voorbeeldlay-out kunt u Knop1 selecteren door op Knop 3 te drukken terwijl Knop 3 is geselecteerd, en u kunt Knop 3 selecteren door op omhoog te drukken terwijl Knop 1 is geselecteerd.

Deze controle gebeurt in een script. Het is een script voor algemeen gebruik dat kan worden gebruikt met een klein aantal beschrijvingen en kan worden gebruikt zoals het is in andere scènes. In plaats daarvan gelden de volgende beperkingen:

  • Je kunt maar in één richting op en neer bewegen.
  • Van toepassing op alle Selectable bestaande objecten onder het opgegeven object

Daarom is het gebruiksdoel beperkt tot menu's die worden geselecteerd door omhoog en omlaag te scrollen, maar het is erg handig als je je beperkt tot die lay-out. Overigens is het beperkt tot de boven- en onderkant, maar als je het script een beetje aanpast, kun je het beperken tot links en rechts.

Maak een script in uw project. Je kunt het van alles noemen, maar ik laat SelectLoop het bij .

Het script ziet er als volgt uit:

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

Wat we doen is het maken van de volgende instellingen voor het toetsselectiegedrag navigation .

  • Druk op de omhoog-toets om het vorige object te selecteren en selecteer het laatste object om het eerste object te selecteren.
  • Druk op de omlaag-toets om het volgende object te selecteren of selecteer het eerste object als dit het laatste object is.

Overigens hangt de volgorde van dit object (Selecteerbaar) af van de volgorde van de hiërarchie. Rangschik ze in de volgorde waarin u ze in de hiërarchie wilt selecteren.

Nadat u het script hebt opgeslagen, voegt u het toe als een component. Dit script wordt toegepast op in het bijgevoegde object Selectable , dus deze keer Canvas zullen we toevoegen aan .

Probeer het te verplaatsen en kijk of je het met een toetsaanslag tussen Knop1 en Knop3 kunt verplaatsen.