Возможно ли отслеживать зажим кнопки ButtonUI в Unity, чтобы при этом не срабатывал метод onclick()?

возможно ли чтобы при зажиме Button не срабатывал метод onclick(). Например : когда я зажима кнопку istrue = true, но когда я отпускаю кнопку onclick() не работал. И наоборот, чтобы когда я нажимал кнопку не срабатывал метод зажатия (istrue = true).


Ответы (2 шт):

Автор решения: Andrew

можно на кнопку повесить дополнительный скрипт метод онклик которой вызывает функцию твоего скрипта.

Твой скрипт должен делать следующее:

засекать время зажатия (это можно отследить по состоянию между mouseDown и mouseUp) и если это время больше некоего необходимого порога (например 0.1 сек) то вызывать определенную функцию. Уже отсюда а не из onclick() кнопки

а mouseUp в этом же скрипте ловить необходимо внутри апдейта.

Ничего особо сложного.

→ Ссылка
Автор решения: Alemkhan Utepkaliev

Возможно всё)

В поддержу ответа выше от 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 можно сравнить время зажатия, и если оно необходимой длины или другое подобное условие то можно ничего не выполнять, как Вы и хотели.

Также если зажатие было коротким то не включать Ваш метод зажатия

→ Ссылка