UI nesnelerinin seçiminde döngü yapma

Sayfa güncel :
Sayfa oluşturma tarihi :

Doğrulama ortamı

Windows
  • pencereler 11
Unity Düzenleyicisi
  • 2020.3.25f1

Bu ipucu için önkoşullar

Bu ipuçlarının açıklanması için ön koşul olarak aşağıdaki ayarlar önceden yapılmıştır.

referans

Örnek UI Nesnelerini Dağıtma

Düğmeyi Tuval üzerine aşağıdaki gibi yerleştirin: Seçilen nesne netlik için yeşil renkte görüntülenir.

Yalnızca seçili yöndeki nesneleri seçebilirsiniz.

Bir UI nesnesi yerleştirdiğinizde, UI nesnesini belirtilen yönde seçmek için başlangıçta klavyedeki veya gamepad'deki ok tuşlarına basabilirsiniz. Bu çok sezgisel ve anlaşılması kolay, bu yüzden ayarları değiştirmekle uğraşmanıza gerek olduğunu düşünmüyorum.

Ancak menü benzeri bir düzende "alt kısım seçiliyken aşağı bastığınızda üste dön" gibi bir seçim döngüsü işlemi yapmak varsayılan olarak mümkün değildir.

Yukarıdaki şekilde, Düğme3 seçiliyken aşağı basarak Düğme1'i seçemezsiniz. Elbette, Button1 seçiliyken yukarı basarsanız, Button3'ü seçemezsiniz.

Seçimler arasında geçiş yapma

Burada, seçimler arasında sonsuz bir şekilde geçiş yapmanızı sağlayan bir mekanizma oluşturacağız. Örnek mizanpajda, Düğme3 seçiliyken aşağı basarak Düğme1'i seçebilir ve Düğme1 seçiliyken yukarı basarak Düğme3'ü seçebilirsiniz.

Bu denetim bir komut dosyasında yapılır. Az sayıda betimleme ile kullanılabilen ve diğer sahnelerde olduğu gibi kullanılabilen genel amaçlı bir senaryodur. Bunun yerine, aşağıdaki kısıtlamalar geçerlidir:

  • Yalnızca bir yönde yukarı ve aşağı hareket edebilirsiniz.
  • Belirtilen nesne altında var olan tüm Selectable nesneler için geçerlidir

Bu nedenle, kullanım hedefi yukarı ve aşağı kaydırılarak seçilen menülerle sınırlıdır, ancak kendinizi bu düzen ile sınırlandırırsanız çok kullanışlıdır. Bu arada, üst ve alt ile sınırlıdır, ancak komut dosyasını biraz değiştirirseniz, sol ve sağ ile sınırlı hale getirebilirsiniz.

Projenizde bir komut dosyası oluşturun. Ona herhangi bir isim verebilirsin, ama ben olarak bırakacağım SelectLoop .

Komut dosyası şuna benzer:

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

Yaptığımız şey, anahtar seçim davranışı navigation için aşağıdaki ayarları yapmaktır.

  • Önceki nesneyi seçmek için yukarı tuşuna basın ve ilk nesneyi seçmek için son nesneyi seçin.
  • Sonraki nesneyi seçmek için aşağı tuşuna basın veya son nesneyse ilk nesneyi seçin.

Bu arada, bu nesnenin sırası (Seçilebilir) hiyerarşinin sırasına bağlıdır. Bunları hiyerarşide seçilmelerini istediğiniz sıraya göre düzenleyin.

Komut dosyasını kaydettikten sonra bileşen olarak ekleyin. Bu komut dosyası ekli nesneye Selectable uygulanacaktır, bu yüzden bu sefer Canvas 'ye ekleyeceğiz.

Taşımayı deneyin ve bir tuşa basarak Button1 ve Button3 arasında taşıyıp taşıyamayacağınıza bakın.