【问题标题】:Unity OnMouseDown detect which button via Event TriggerUnity OnMouseDown 通过事件触发器检测哪个按钮
【发布时间】:2018-01-07 14:04:31
【问题描述】:

是否有任何方法可以检测在带有事件系统 UI 组件的 UI 元素上单击了哪个鼠标按钮?

我的场景中有对象,其脚本包含 OnMouseDown。单击游戏对象时,我可以检查是否单击了左键或右键:

public void OnMouseDown()
{
    if(Input.GetMouseButton(0))  print("clicked left button");
}

但是,这些对象在画布上也有一个 Text 元素,我希望 MouseDown 在单击文本时也能触发。我附加了一个指向 MouseDown 的事件触发器。在这种情况下,print("clicked left button") 永远不会到达。我猜它必须需要一帧才能传递事件数据或其他东西?

我可以将单独的脚本附加到所有 Text 元素并使用 EventSystems 接口 (OnPointerClick(PointerEventData eventData)),但如果可能的话,我希望避免使用额外的脚本。所以,我的问题是:有什么方法可以传递使用Event System component 点击的按钮?

我尝试过的事情:

1) 在 MouseDown 中使用 Input.GetMouseButtonDown 而不是 Input.GetMouseButton(0)

2) 在 MouseDown 中包含PointerEventData 作为参数(导致错误)

3) 使用 EventSystem API:

public void Clicked(PointerEventData p)
{
    if (p.button == PointerEventData.InputButton.Left)
    {
        print("UI Click");
    }
}

但是这个空白并没有出现在事件触发器组件的可用函数列表中。

【问题讨论】:

  • 你的#3 应该可以工作它有问题吗?

标签: unity3d unity5


【解决方案1】:

指针事件正在使用光线投射目标。文本元素本身不是光线投射目标(不可点击)。如果要触发文本的点击事件,可以添加覆盖文本的图像。不要忘记检查设置光线投射目标并确保其层不是忽略光线投射的东西。您还可以将面板的文本子项设置为默认情况下也将图像作为光线投射目标。

简而言之:您只能在作为光线投射目标的 gui 元素/游戏对象上使用指针事件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-07
    • 2012-07-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-04
    • 2020-06-12
    相关资源
    最近更新 更多