Procházení výběru objektů uživatelského rozhraní ve smyčce
Ověřovací prostředí
- Windows
-
- Systém Windows 11
- Unity Editor
-
- 2020.3.25f1
Předpoklady pro tento tip
Následující nastavení byla provedena předem jako předpoklad pro vysvětlení těchto tipů.
odkaz
Nasazení ukázkových objektů uživatelského rozhraní
Umístěte tlačítko na plátno následujícím způsobem: Vybraný objekt je pro přehlednost zobrazen zeleně.
Můžete vybrat pouze objekty, které jsou ve vybraném směru.
Když umístíte objekt uživatelského rozhraní, můžete nejprve stisknutím kláves se šipkami na klávesnici nebo gamepadu vybrat objekt uživatelského rozhraní v určeném směru. To je velmi intuitivní a snadno pochopitelné, takže si nemyslím, že se musíte obtěžovat se změnou nastavení.
V rozvržení podobném nabídce však není možné ve výchozím nastavení provést operaci výběrové smyčky, jako je například "návrat na začátek, když stisknete dolů, když je vybráno spodní".
Na obrázku výše nemůžete vybrat Button1 stisknutím, když je vybráno Button3. Samozřejmě, pokud stisknete nahoru, když je vybráno tlačítko 1, nebudete moci vybrat tlačítko 3.
Procházení výběrů ve smyčce
Zde vytvoříme mechanismus, který vám umožní donekonečna procházet výběry. V ukázkovém rozvržení můžete vybrat Button1 stisknutím klávesy Button3, když je vybráno Button3, a můžete vybrat Button3 stisknutím nahoru, když je vybráno Button1.
Tento ovládací prvek se provádí ve skriptu. Jedná se o univerzální skript, který lze použít s malým počtem popisů a lze jej použít stejně jako v jiných scénách. Místo toho platí následující omezení:
- Můžete se pohybovat nahoru a dolů pouze jedním směrem.
- Platí pro všechny
Selectable
existující v zadaném objektu
Proto je cíl použití omezen na nabídky, které jsou vybírány posouváním nahoru a dolů, ale je velmi užitečné, pokud se omezíte na toto rozložení. Mimochodem, je omezen na horní a dolní část, ale pokud skript trochu upravíte, můžete jej omezit na levou a pravou stranu.
Vytvořte skript v projektu. Můžete to pojmenovat jakkoli, SelectLoop
ale já to nechám jako .
Skript vypadá takto:
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() { }
}
To, co děláme, je provádění následujících nastavení pro chování navigation
při výběru klíčů.
- Stisknutím klávesy nahoru vyberte předchozí objekt a výběrem posledního objektu vyberte první objekt.
- Stisknutím klávesy dolů vyberte další objekt, nebo vyberte první objekt, pokud je to poslední objekt.
Mimochodem, pořadí tohoto objektu (Selectable) závisí na pořadí hierarchie. Uspořádejte je v pořadí, v jakém je chcete v hierarchii vybrat.
Po uložení skript připojte jako komponentu.
Tento skript bude aplikován na v připojeném objektu Selectable
, takže tentokrát Canvas
se připojíme k .
Zkuste jej přesunout a zjistěte, zda jej můžete přesunout mezi Button1 a Button3 pomocí stisknutí klávesy.