Loopa igenom markeringen av UI-objekt
Miljö för verifiering
- Windows
-
- Windows 11 (på engelska)
- Unity-redigeraren
-
- 2020.3.25f1
Förutsättningar för det här tipset
Följande inställningar har gjorts i förväg som en förutsättning för förklaringen av dessa tips.
hänvisning
Distribuera exempelgränssnittsobjekt
Placera knappen på arbetsytan enligt följande: Det valda objektet visas i grönt för tydlighetens skull.
Du kan bara markera objekt som är i den valda riktningen.
När du monterar ett användargränssnittsobjekt kan du först trycka på piltangenterna på ett tangentbord eller en handkontroll för att markera användargränssnittsobjektet i den angivna riktningen. Detta är väldigt intuitivt och lätt att förstå, så jag tror inte att du behöver bry dig om att ändra inställningarna.
I en menyliknande layout är det dock inte möjligt att utföra en urvalsslinga som "återgå till toppen när du trycker ned medan botten är markerad" som standard.
I figuren ovan kan du inte välja Knapp1 genom att trycka nedåt medan Knapp3 är valt. Naturligtvis, om du trycker uppåt medan Knapp1 är valt, kommer du inte att kunna välja Knapp3.
Loopa genom markeringar
Här kommer vi att skapa en mekanism som låter dig loopa igenom valen oändligt. I exempellayouten kan du välja Knapp1 genom att trycka nedåt medan Knapp3 är markerad, och du kan välja Knapp3 genom att trycka uppåt medan Knapp1 är markerad.
Den här kontrollen görs i ett skript. Det är ett allmänt skript som kan användas med ett litet antal beskrivningar och kan användas som det är i andra scener. I stället gäller följande begränsningar:
- Du kan bara röra dig upp och ner i en riktning.
- Gäller för alla
Selectable
befintliga under det angivna objektet
Därför är användningsmålet begränsat till menyer som väljs genom att rulla upp och ner, men det är mycket användbart om du begränsar dig till den layouten. Förresten, det är begränsat till toppen och botten, men om du ändrar skriptet lite kan du göra det begränsat till vänster och höger.
Skapa ett skript i projektet. Du kan kalla det vad som helst, men jag SelectLoop
lämnar det som .
Skriptet ser ut så här:
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() { }
}
Vad vi gör är att göra följande inställningar för tangentvalsbeteendet navigation
.
- Tryck på upp-tangenten för att markera föregående objekt och välj det sista objektet för att markera det första objektet.
- Tryck på nedåtknappen för att markera nästa objekt, eller markera det första objektet om det är det sista objektet.
Förresten, ordningen på det här objektet (valbar) beror på hierarkins ordning. Ordna dem i den ordning du vill att de ska väljas i hierarkin.
När du har sparat skriptet bifogar du det som en komponent.
Detta skript kommer att tillämpas på i det bifogade objektet Selectable
, så den här gången Canvas
kommer vi att bifoga till .
Prova att flytta den och se om du kan flytta den mellan Knapp1 och Knapp3 med en tangenttryckning.