循環顯示 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 之間移動它。