Возможно ли отслеживать зажим кнопки ButtonUI в Unity, чтобы при этом не срабатывал метод onclick()?
возможно ли чтобы при зажиме Button не срабатывал метод onclick(). Например : когда я зажима кнопку istrue = true, но когда я отпускаю кнопку onclick() не работал. И наоборот, чтобы когда я нажимал кнопку не срабатывал метод зажатия (istrue = true).
Ответы (2 шт):
можно на кнопку повесить дополнительный скрипт метод онклик которой вызывает функцию твоего скрипта.
Твой скрипт должен делать следующее:
засекать время зажатия (это можно отследить по состоянию между mouseDown и mouseUp) и если это время больше некоего необходимого порога (например 0.1 сек) то вызывать определенную функцию. Уже отсюда а не из onclick() кнопки
а mouseUp в этом же скрипте ловить необходимо внутри апдейта.
Ничего особо сложного.
Возможно всё)
В поддержу ответа выше от Andrew дополню для ясности
Сохраните время зажатия в OnMouseDown (нажатие кнопки) и OnMouseUp (отжатие кнопки) и необходимую разницу между двумя данными и будет время зажатия.
Определите необходимое время зажатия, и Вы можете вызвать OnClick метод самостоятельно, для этого лучше не настраивать кнопку через редактор а получить доступ через код:
using UnityEngine;
using UnityEngine.UI;
public class ButtonOnClick : MonoBehaviour
{
[SerializeField] private Button button_;
void Start()
{
button_.onClick.AddListener(ButtonOnClick);
}
private void ButtonOnClick()
{
Debug.Log("Button Click!");
}
}
Таким образом в методе ButtonOnClick можно сравнить время зажатия, и если оно необходимой длины или другое подобное условие то можно ничего не выполнять, как Вы и хотели.
Также если зажатие было коротким то не включать Ваш метод зажатия