如何使用新的 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 元素内的局部坐标。
我正在切换到新的 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 元素内的局部坐标。