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("Есть второе пробитие");
}
}
}
}