循環顯示 UI 對象的選擇

更新頁 :
頁面創建日期 :

驗證環境

窗戶
  • 窗戶 11
Unity 編輯器
  • 2020.3.25f1

此提示的先決條件

作為解釋這些提示的先決條件,已提前進行了以下設置。

參考

部署範例 UI 物件

將按鈕放在畫布上,如下所示: 為清楚起見,所選物件以綠色顯示。

只能選擇位於選定方向的物件。

放置UI物件時,最初可以按鍵盤或遊戲手柄上的箭頭鍵以按指定方向選擇UI物件。 這非常直觀且易於理解,因此我認為您無需費心更改設置。

但是,在類似功能表的佈局中,預設情況下無法執行選擇迴圈操作,例如“選擇底部時按下時返回頂部”。

在上圖中,您不能在選擇 Button1 時通過按下 Button3 來選擇 Button3。 當然,如果在選擇 Button1 時按向上,則無法選擇 Button3。

循環顯示選取區

在這裡,我們將創建一種機制,允許您無休止地循環瀏覽選擇。 在示例佈局中,可以選擇 Button1,同時按下 Button3,也可以通過選擇 Button3 時選擇 Button1。

此控制件是在腳本中完成的。 它是一個通用腳本,可以與少量描述一起使用,並且可以像在其他場景中一樣使用。 相反,以下限制適用:

  • 您只能在一個方向上下移動。
  • 適用於指定物件下的所有 Selectable 現有物件

因此,使用目標僅限於通過上下滾動選擇的功能表,但如果您將自己限制在該佈局中,這將非常有用。 順便說一句,它僅限於頂部和底部,但是如果您稍微修改腳本,則可以將其限制為左側和右側。

在專案中創建腳本。 你可以給它起任何名字,但我會 SelectLoop 把它保留為 .

文稿如下所示:

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

我們正在做的是 對鍵選擇行為 navigation 進行以下設定 。

  • 按向上鍵選擇上一個對象,選擇最後一個物件選擇第一個物件。
  • 按向下鍵選擇下一個物件,如果第一個對像是最後一個物件,則選擇第一個物件。

順序(可選)取決於層次結構的順序。 按照您希望在層次結構中選擇它們的順序排列它們。

保存文稿后,將其作為元件附加。 這個腳本會應用到附加物件 Selectable 中,所以這次 Canvas 我們會附加到。

嘗試移動它,看看你是否可以通過擊鍵在 Button1 和 Button3 之間移動它。