循环显示 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 之间移动它。