Unity OnMouseDown通过事件触发器检测哪个按钮

时间:2018-01-07 14:04:31

标签: unity3d unity5

有没有办法检测在携带Event System UI组件的UI元素上单击了哪个鼠标按钮?

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

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");
    }
}

但是这个void不会出现在Event Trigger组件的可用函数列表中。

1 个答案:

答案 0 :(得分:-1)

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

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