Double click как доработать код для нескольких кнопок

257
03 июля 2017, 16:16

Всем добра! Снова нужна помощь. Пишу небольшое приложение, имеется несколько кнопок выполняющих разные задачи при одном нажатии (SingleClick) и двух (DoubleClick). Для этого нашел скрипт на форуме. Все работает идеально с одной кнопкой, добавил еще 2 кнопки и заметил, что при быстром нажатии к примеру btn1 и btn2 срабатывает doubleClick для btn2, То есть необходимо чтобы, DoubleClick срабатывал при двойном нажатии одной и той же кнопки, подскажите как подправить скрипт под несколько кнопок. Заранее извиняюсь если объясняю сумбурно, я новичок и немного плаваю в терминологии. Скопированный скрипт:

using UnityEngine;
using System.Collections;
using UnityEngine.UI;

public class DoubleClickTest : MonoBehaviour
{
    private float doubleClickTimeLimit = 0.35f;
    bool clickedOnce = false;
    public Button = btn1, btn2, btn3;
    float count = 0f;

    void Start(){
        btn1.onClick.AddListener(Task1);
        btn2.onClick.AddListener(Task2);
        btn3.onClick.AddListener(Task3);
    }
    public void startClick(){
        StartCoroutine (ClickEvent ());
    }
    public IEnumerator ClickEvent()
    {
        if (!clickedOnce && count < doubleClickTimeLimit) {
            clickedOnce = true;
        } else {
            clickedOnce = false;
            yield break;  //If the button is pressed twice, don't allow the second function call to fully execute.
        }
        yield return new WaitForEndOfFrame();
        while(count < doubleClickTimeLimit)
        {
            if(!clickedOnce)
            {
                DoubleClick();
                count = 0f;
                clickedOnce = false;
                yield break;
            }
            count += Time.deltaTime;// increment counter by change in time between frames
            yield return null; // wait for the next frame
        }
        SingleClick();
        count = 0f;
        clickedOnce = false;
    }
    private void SingleClick()
    {
        Debug.Log("Single Click");
    }
    private void DoubleClick()
    {
        Debug.Log("Double Click");
    }
}
Answer 1

У тебя отсчёт времени до 2-го нажатия единый для всех кнопок.

Вариант 1. Раздели скрипты на:

DoubleClickTest1 
DoubleClickTest2 

Вариант 2. Определяй какая нажата кнопка (например по тегу или имени) и считай отдельно

clickedOnce1
clickedOnce2

Вариант 3. Определяй какая нажата кнопка и храни clickedOnce внутри кнопки/объекта

READ ALSO
Как получить скрин

Как получить скрин

Подскажите как получать скрин под нужное разрешение,но и не обрезать в это время скрин?

240
Может ли GUID совпасть?

Может ли GUID совпасть?

Хотя уникальность каждого отдельного GUID не гарантируется, общее количество уникальных ключей настолько велико (2128 или 3,4028×1038), что вероятность...

336
Сильно тормозит Visual Studio(2017)

Сильно тормозит Visual Studio(2017)

При написании кода студия начинает сильно тормозить (1-2) секунды, потом отлагивает, и так все времяПроблема появилась пару дней назад

539
в C# запросить ввод в форму textbox

в C# запросить ввод в форму textbox

Как в C# запросить ввод в форму, если она пуста?

416