我是这里的新人,我从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()无法正常工作... 我该怎么办?问候;)
答案 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");
}
}