Unity3D :导航事件
推荐:将NSDT场景编辑器加入你的3D工具链
3D工具集:NSDT简石数字孪生
导航事件
当用户按方向键、移动操纵杆或按 或箭头键时,导航事件在运行时发生。它们是用户尝试导航的指示器EscapeEnter
用户界面
,但它们不限于特定的输入设备,例如键盘。与焦点](UIE-焦点事件.html)事件的区别在于,导航事件不需要焦点移动到新的 UI 元素。
所有导航事件的基类都是 NavigationEventBase。
所有导航事件都会向下滴、冒泡并且是可取消的,但建议在冒泡传播阶段侦听这些事件。这是因为导航事件由输入事件触发,这些输入事件也可用于与各个控件交互。例如,按钮将通过单击按钮对按键的按下做出反应,并且它将取消 .在冒泡阶段侦听这些事件可确保它们是导航事件。EnterNavigationSubmitEvent
事件 | 描述 | 涓涓细流 | 冒泡 | 可取消 |
---|---|---|---|---|
导航移动事件 | 当用户进行移动输入时发送。 | ✔ | ✔ | ✔ |
导航取消事件 | 当用户进行取消输入时发送。 | ✔ | ✔ | ✔ |
导航提交事件 | 当用户进行提交输入时发送。 | ✔ | ✔ | ✔ |
事件列表
导航移动事件
当用户按下方向键、移动操纵杆或按箭头键时发送。NavigationMoveEvent
某些控件将使用箭头键来实现其自己的功能。例如,ListView 允许用户使用向上和向下箭头键选择项目。在这种情况下,控件将取消 ,并且事件不会进入冒泡阶段。NavigationMoveEvent
方向
:导航的方向。(, , , ,NoneLeftUpRightDown
)
移动:移动
向量。如果事件是由模拟轴输入(如操纵杆)触发的,则此属性允许访问方向矢量。
导航取消事件
当用户取消当前导航操作(例如按键盘上的“Escape”键)时触发。请务必注意,此事件不会影响当前焦点元素,这意味着在取消之前具有焦点的 UI 元素仍处于选中状态。NavigationCancelEvent
导航提交事件
当用户按下提交按钮(例如按键盘上的“Enter”键)时触发。NavigationSubmitEvent
如果控件处理事件本身,它将取消事件,防止它进入冒泡阶段。例如,具有焦点的文本字段将阻止冒泡。另一方面,可聚焦的标签或图像将允许 冒泡到其父元素,允许它们在需要时处理事件。NavigationSubmitEventNavigationSubmitEvent
例
下面的代码示例演示如何在运行时 UI 中注册导航事件的回调:
using UnityEngine.UIElements;
public class MyNavigationHandler : MonoBehaviour
{
void OnEnable()
{
// Get a reference to the root visual element
var uiDocument = GetComponent<UIDocument>();
var rootVisualElement = uiDocument.rootVisualElement;
// Register for navigation events
rootVisualElement.RegisterCallback<NavigationCancelEvent>(OnNavCancelEvent);
rootVisualElement.RegisterCallback<NavigationMoveEvent>(OnNavMoveEvent);
rootVisualElement.RegisterCallback<NavigationSubmitEvent>(OnNavSubmitEvent);
}
private void OnNavSubmitEvent(NavigationSubmitEvent evt)
{
Debug.Log($"OnNavSubmitEvent {evt.propagationPhase}");
}
private void OnNavMoveEvent(NavigationMoveEvent evt)
{
Debug.Log($"OnNavMoveEvent {evt.propagationPhase} - move {evt.move} - direction {evt.direction}");
}
private void OnNavCancelEvent(NavigationCancelEvent evt)
{
Debug.Log($"OnNavCancelEvent {evt.propagationPhase}");
}
}
由3D建模学习工作室整理翻译,转载请注明出处!