Version: Unity 6.0 (6000.0)
语言 : 中文
鼠标事件
面板事件

导航事件

当用户按下 D 形键盘、移动游戏杆或按下 EscapeEnter 或箭头键时,导航事件发生在运行时。它们是用户尝试导航__ UI__(即用户界面,User Interface)让用户能够与您的应用程序进行交互。Unity 目前支持三种 UI 系统。更多信息
See in Glossary
的标志,但不仅限于特定的输入设备(例如键盘)。与焦点事件的区别在于,导航事件不需要将焦点移动到新的 UI 元素。

所有导航事件的基类是 NavigationEventBase

所有导航事件都会涓滴、冒泡并可以取消,但建议在冒泡传播阶段监听这些事件。这是因为导航事件由输入事件触发,输入事件也可能用于与各个控件交互。例如,一个按钮将对按下 Enter 键并单击按钮做出反应,并取消 NavigationSubmitEvent。在冒泡阶段监听这些事件可确保它们是导航事件。

事件 描述 涓滴 冒泡 可取消
NavigationMoveEvent 在用户进行移动输入时发送。
NavigationCancelEvent 在用户进行取消输入时发送。
NavigationSubmitEvent 在用户进行提交输入时发送。

事件列表

NavigationMoveEvent

当用户按下 D 形键盘、移动游戏杆或按下箭头键时发送 NavigationMoveEvent

某些控件将使用箭头键来实现自己的功能。例如,ListView 允许用户使用向上和向下箭头键来选择项目。在这种情况下,控件将取消 NavigationMoveEvent,并且事件不会进入冒泡阶段。

direction:导航的方向。(NoneLeftUpRightDown)

move:移动矢量。如果事件是由模拟轴输入(例如游戏杆)触发的,则此属性允许访问方向矢量。

NavigationCancelEvent

当用户取消当前导航操作(例如按键盘上的 `Escape`` 键)时触发 NavigationCancelEvent。必须注意,此事件不会影响当前获得焦点的元素,这意味着在取消之前获得焦点的 UI 元素保持选中状态。

NavigationSubmitEvent

当用户按下提交按钮(例如按下键盘上的 `Enter`` 键)时触发 NavigationSubmitEvent

如果控件自己处理事件,则会取消事件,防止其进入冒泡阶段。例如,具有焦点的 TextField 将阻止 NavigationSubmitEvent 冒泡。另一方面,可聚焦的标签图像将允许 NavigationSubmitEvent 向上冒泡到其父元素,允许它们在需要时处理事件。

示例

以下代码示例展示了如何在运行时 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}");
  }
}

其他资源

鼠标事件
面板事件