Unity双击事件

时间:2018-07-23 17:09:30

标签: c# unity3d double-click

我是这里的新人,我从UNITY开始冒险。我有双击事件的问题。我想在我的商店里买卖东西。当我为统一(public Button button;)分配按钮时,它可以工作。但是,当我尝试将此更改更改为“开始”和“更新”方法上的按钮时:

    void Start () {
    button = GameObject.Find(EventSystem.current.currentSelectedGameObject.name).GetComponent<Button>();
    button.onClick.AddListener(ButtonListner);
}
void Update()
{
    button = GameObject.Find(EventSystem.current.currentSelectedGameObject.name).GetComponent<Button>();
}
private void ButtonListner()
{
    counter++;
    if (counter == 1)
    {
        StartCoroutine("doubleClickEvent");
    }
}

IEnumerator doubleClickEvent()
{

    yield return new WaitForSeconds(clickTimer);
    if (counter > 1)
    {...}

不幸的是,方法doubleClickEvent()无法正常工作... 我该怎么办?问候;)

1 个答案:

答案 0 :(得分:1)

我注意到的第一件事是:button = GameObject.Find(EventSystem.current.currentSelectedGameObject.name).GetComponent<Button>();

EventSystem.current.currentSelectedGameObject属性可以随时为null,尤其是在第一帧中,这意味着在Start函数中使用它不是一个好主意。找到Button GameObject,然后从中获取Button组件:

Button button;

void Start()
{
    button = GameObject.Find("YourButtonName").GetComponent<Button>();
    button.onClick.AddListener(ButtonListner);
}

"YourButtonName" GameObject的名称替换Button


您甚至不需要做大部分的工作。您可以使用PointerEventData.clickCount函数中的OnPointerClick进行双击或点击计数。您必须实现IPointerClickHandler接口才能使它正常工作。

只需附加到Button GameObject:

public class ClickCountDetector : MonoBehaviour, IPointerClickHandler
{
    public void OnPointerClick(PointerEventData eventData)
    {
        int clickCount = eventData.clickCount;

        if (clickCount == 1)
            OnSingleClick();
        else if (clickCount == 2)
            OnDoubleClick();
        else if (clickCount > 2)
            OnMultiClick();
    }

    void OnSingleClick()
    {
        Debug.Log("Single Clicked");
    }

    void OnDoubleClick()
    {
        Debug.Log("Double Clicked");
    }

    void OnMultiClick()
    {
        Debug.Log("MultiClick Clicked");
    }
}