#c# #unity3d
Вопрос:
У меня есть функция OnPointerClick (), которая иногда срабатывает дважды, если я продолжаю нажимать на несколько кнопок одновременно, хотя я нажимал эту кнопку только один раз. Это происходит в новой системе пользовательского интерфейса ввода. Как мне предотвратить это?
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.UI;
public class ClickableButtons : MonoBehaviour, IPointerClickHandler {
public void OnPointerClick (PointerEventData eventData) {
Debug.Log("Clicked"); //Called twice most of the time when button is pressed once
}
}
Ответ №1:
Прежде всего, давайте попробуем решить проблему, вызванную 2 кликами, до того, как появятся причины 2 кликов. Потому что предоставленной вами информации недостаточно.
public class ClickableButtons : MonoBehaviour, IPointerClickHandler
{
private static readonly object ClickLock = new object();
public void OnPointerClick(PointerEventData eventData)
{
lock (ClickLock)
{
Debug.Log("Clicked"); //Called twice most of the time when button is pressed once
}
}
}
Если вы укажете действия, которые должны быть выполнены после щелчка в инструкции «блокировка», это предотвратит одновременное выполнение действий.
public class ClickableButtons : MonoBehaviour, IPointerClickHandler
{
private static readonly object ClickLock = new object();
private bool clicked = false;
public void OnPointerClick(PointerEventData eventData)
{
if (clicked) return;
lock (ClickLock)
{
clicked = true;
Debug.Log("Clicked"); //Called twice most of the time when button is pressed once
clicked = true;
}
clicked = false;
}
}
Вы можете попытаться контролировать его с помощью оператора «если».
Но мне интересно, почему вы не используете событие onclick кнопки?
https://docs.unity3d.com/530/Documentation/ScriptReference/UI.Button-onClick.html
Комментарии:
1. Это аккуратный обходной путь, но я бы предпочел сосредоточиться на том, почему метод вызывается дважды в первую очередь -> скорее всего, потому что обратный вызов был добавлен дважды по какой-то причине ..