Как записать время нажатий на UI кнопки, и повторить нажатия

Общие вопросы о Unity3D

Как записать время нажатий на UI кнопки, и повторить нажатия

Сообщение varan941 04 фев 2020, 14:37

Как записать время нажатий на UI кнопки, и повторить нажатия.
К примеру: нажал на первую кнопку (обьект поменял цвет), , через 2 секунды, нажал на вторую (объект увеличился), через секунду нажал на третью (объект стал как прежде).
После нажал на специальную кнопку и все действия воспроизвелись.
Возможно вы знаете примеры или плагины.
varan941
UNец
 
Сообщения: 8
Зарегистрирован: 21 янв 2020, 21:37

Re: Как записать время нажатий на UI кнопки, и повторить нажатия

Сообщение MrDmitry 04 фев 2020, 17:42

Ну так по нажатию кнопки заносишь в массив какая кнопка нажата и включаешь корутину, при нажатии на другую кнопку, заносишь время прошетшее с нажатия первой кнопки и название второй кнопки, обнуляешь таймер и так же со следующими кнопками. После нажатия спец кнопки воспроизводишь из массива функцию которая срабатывала по клику кнопки, делаешь это с записанной задержкой.
MrDmitry
UNITрон
 
Сообщения: 223
Зарегистрирован: 05 авг 2017, 17:21

Re: Как записать время нажатий на UI кнопки, и повторить нажатия

Сообщение varan941 04 фев 2020, 17:51

MrDmitry писал(а):Ну так по нажатию кнопки заносишь в массив какая кнопка нажата и включаешь корутину, при нажатии на другую кнопку, заносишь время прошетшее с нажатия первой кнопки и название второй кнопки, обнуляешь таймер и так же со следующими кнопками. После нажатия спец кнопки воспроизводишь из массива функцию которая срабатывала по клику кнопки, делаешь это с записанной задержкой.


Идея понятна, спасибо. Попробую сделать, потом отпишусь.
varan941
UNец
 
Сообщения: 8
Зарегистрирован: 21 янв 2020, 21:37

Re: Как записать время нажатий на UI кнопки, и повторить нажатия

Сообщение 1max1 04 фев 2020, 18:08

https://drive.google.com/file/d/1BEjoay ... sp=sharing

Аватара пользователя
1max1
Адепт
 
Сообщения: 5505
Зарегистрирован: 28 июн 2017, 10:51

Re: Как записать время нажатий на UI кнопки, и повторить нажатия

Сообщение varan941 06 фев 2020, 16:22

1max1 писал(а):https://drive.google.com/file/d/1BEjoayovpZEeZDkrZJeEHpykaBkA3UTt/view?usp=sharing


Неплохой вариант, но тут запоминаются именно манипуляции с объектом. А мне нужно чтобы запоминались именно нажатия на кнопки.
varan941
UNец
 
Сообщения: 8
Зарегистрирован: 21 янв 2020, 21:37

Re: Как записать время нажатий на UI кнопки, и повторить нажатия

Сообщение varan941 06 фев 2020, 16:48

MrDmitry писал(а):Ну так по нажатию кнопки заносишь в массив какая кнопка нажата и включаешь корутину, при нажатии на другую кнопку, заносишь время прошетшее с нажатия первой кнопки и название второй кнопки, обнуляешь таймер и так же со следующими кнопками. После нажатия спец кнопки воспроизводишь из массива функцию которая срабатывала по клику кнопки, делаешь это с записанной задержкой.


Я сделал. Алгоритм:
1.добавляем нужную кнопку в скрипт
2.добовляем ей OnClick event с нужным методом из этого скрипта
3.создаём корутину в скрипте, если её нет
4.вызываем её отдельным методом по нажатию

Синтаксис:
Используется csharp
using UnityEngine;
using UnityEngine.UI;

public class Click_tracking : MonoBehaviour
{
    //массивы для записи времени нажатий каждой кнопки
    public float[] _time; public float[] _time1; public float[] _time2; public float[] _time3; public float[] _time4; public float[] _time5; public float[] _time6; public float[] _time7; public float[] _time8; public float[] _time9; public float[] _time10;

    public int[] _counts; //счётчики количества нажатий
    public Button[] _button;

    bool _cheakTimer = false;
    public float _timer; //таймер

    private void Update()
    {
        _timer += Time.deltaTime;
    }

    public void NewMethod() // методы для фиксации времени нажатий
    {
        if (!_cheakTimer)
        {
            _time[_counts[0]] = _timer;
            _counts[0] += 1;
        }
        Debug.Log(_button[0]);  
    }

    public void NewMethod1()
    {
        if (!_cheakTimer)
        {
            _time1[_counts[1]] = _timer;
            _counts[1] += 1;
        }
    }
   
    public void Reproduce() // метод для запуска корутин
    {
        _cheakTimer = true;
        _timer = 0.0f;

        StartCoroutine("Zero");
        StartCoroutine("First");
        StartCoroutine("Second");
       
        Debug.Log("Старт корутины");
    }

    public IEnumerator Zero() // корутины для вызова нажатий
    {
        for (int i = 0; i < _counts[0]; i++)
        {
            if (i == 0)
            {
                yield return new WaitForSeconds(_time[i]);
                _button[0].onClick.Invoke();
                Debug.Log("Есть первое пробитие");
            }
            else
            {
                yield return new WaitForSeconds(_time[i] - _time[i - 1]);
                _button[0].onClick.Invoke();
                Debug.Log("Есть второе пробитие");
            }
        }

    }
    public IEnumerator First()
    {
        for (int i = 0; i < _counts[1]; i++)
        {
            if (i == 0)
            {
                yield return new WaitForSeconds(_time1[i]);
                _button[1].onClick.Invoke();
                Debug.Log("Есть первое пробитие");
            }
            else
            {
                yield return new WaitForSeconds(_time1[i] - _time1[i - 1]);
                _button[1].onClick.Invoke();
                Debug.Log("Есть второе пробитие");
            }
        }
    }
    public IEnumerator Second()
    {
        for (int i = 0; i < _counts[2]; i++)
        {
            if (i == 0)
            {
                yield return new WaitForSeconds(_time2[i]);
                _button[2].onClick.Invoke();
                Debug.Log("Есть первое пробитие");
            }
            else
            {
                yield return new WaitForSeconds(_time2[i] - _time2[i - 1]);
                _button[2].onClick.Invoke();
                Debug.Log("Есть второе пробитие");
            }
        }
    }
    public IEnumerator Third()
    {
        for (int i = 0; i < _counts[3]; i++)
        {
            if (i == 0)
            {
                yield return new WaitForSeconds(_time3[i]);
                _button[3].onClick.Invoke();
                Debug.Log("Есть первое пробитие");
            }
            else
            {
                yield return new WaitForSeconds(_time3[i] - _time3[i - 1]);
                _button[3].onClick.Invoke();
                Debug.Log("Есть второе пробитие");
            }
        }
    }    
}

 
varan941
UNец
 
Сообщения: 8
Зарегистрирован: 21 янв 2020, 21:37


Вернуться в Общие вопросы

Кто сейчас на конференции

Сейчас этот форум просматривают: GoGo.Ru [Bot] и гости: 6