检查是否在特定UI元素上单击了鼠标?

时间:2016-07-05 19:56:13

标签: c# unity3d

EventSystem.current.IsPointerOverGameObject()检查是否在任何UI元素上单击了鼠标。如何检查鼠标是否在 特定的 UI元素(2或3个按钮)上单击?我想使用标签并继续使用EventSystem.current.IsPointerOverGameObject()

1 个答案:

答案 0 :(得分:2)

您不能使用EventSystem.current.IsPointerOverGameObject()来阅读按钮点击次数。

您在OnEnable()函数中使用Button注册Button.onClick.AddListener(() => callbackfunctionName());个事件。

然后使用OnDisable()

Button.onClick.RemoveAllListeners();函数中取消注册该事件

由于您需要大约3 Buttons,而不是Button有多个回调函数,我只使用一个以Button作为参数的函数。然后我使用if语句来检查按下了哪个Button。这是最好的方法,因为它减少了代码中的函数数量。

将下面的脚本附加到GameObject,然后将这些按钮拖到button1button2button3位置。

using UnityEngine;
using UnityEngine.UI;

public class ButtonChecker: MonoBehaviour
{

    public Button button1;
    public Button button2;
    public Button button3;

    void OnEnable()
    {
        //Register Button Events
        button1.onClick.AddListener(() => buttonCallBack(button1));
        button2.onClick.AddListener(() => buttonCallBack(button2));
        button3.onClick.AddListener(() => buttonCallBack(button3));

    }

    private void buttonCallBack(Button buttonPressed)
    {
        if (buttonPressed == button1)
        {
            //Your code for button 1
        }

        if (buttonPressed == button2)
        {
            //Your code for button 2
        }

        if (buttonPressed == button3)
        {
            //Your code for button 3
        }
    }

    void OnDisable()
    {
        //Un-Register Button Events
        button1.onClick.RemoveAllListeners();
        button2.onClick.RemoveAllListeners();
        button3.onClick.RemoveAllListeners();
    }
}