如何使用新的 Unity UI 工具包获取 VisualElement 内的相对鼠标位置?

How do you get relative mouse position inside a VisualElement with new Unity UI Toolkit?

我正在切换到新的 UI-Toolkit(基于 css)。使用旧的“canvas”和基于组件的 ui 系统,我会首先查看鼠标是否在 ui 元素内,并且脚本附加到特定的 ui 游戏对象具有两个功能:

public void OnPointerEnter(PointerEventData eventData)
{
    mouseInScreen = true;
}
public void OnPointerExit(PointerEventData eventData)
{
    mouseInScreen = false;
}

然后我会简单地调用 if(OnPointerEnter.mouseInScreen == true) 来查明鼠标是否在。

不幸的是,新的 UI 为整个 ui 元素使用了一个游戏对象,所以我不知道该怎么做。另外,我需要知道 UI VisualElement 中的相对位置。 (例如,鼠标距左侧 80 像素,距其特定元素顶部 130 像素)。

这个新工具包很棒,而且非常新。所以目前很难找到相关资料。

谢谢。

编辑:

我找到了一个问题的解决方案(如何确定鼠标是否在特定元素上。)

我使用了 PointerDownEvent 因为我还需要知道用户何时点击它,但是 PointerEnterEvent 对于我原来的问题非常有用。

myUIelement.RegisterCallback<PointerDownEvent>(OnPointerDownEvent, TrickleDown.TrickleDown);

然后我在这个方法中做我需要的

private void OnPointerDownEvent(PointerDownEvent evt)
{ ... }

我现在需要弄清楚的是如何在 ui 元素中获取“指针”的位置。有一个 OnPointerDownEvent 的 属性 称为“localPosition”,但我不确定如何使用它。

在评论中提供一些帮助并进行一些研究后,这是我自己的答案。

首先像这样获取元素:

VisualElement rootUI = GetComponent<UIDocument>().rootVisualElement;
myUIelement = rootUI.Q<VisualElement>("ElementNameInUIBuilder");

在开始时调用:

myUIelement.RegisterCallback<PointerDownEvent>(OnPointerDownEvent, TrickleDown.TrickleDown);

然后创建函数:

private void OnPointerDownEvent(PointerDownEvent evt)

{ ... }

并且在此函数中只需使用“evt.localPosition”来获取 ui 元素内的局部坐标。