Интервал нажатия на кнопку

Я новичёк в unity и C#.Что добавить в скрипт что бы игрок мог нажимать на кнопку только один раз в секунду?

using UnityEngine;
using UnityEngine.UI;
using UnityEngine.SceneManagement;


public class ButtonScript : MonoBehaviour
{
    public Sprite[] S;
    private int pos;
    public SpriteRenderer SR;
    public Text textComponent;
    private string[] messages = {"Привет", "Как дела?"};
    private int currentIndex = 0;

    void Start()
    {
        // Получаем ссылку на компонент Text
        textComponent = GameObject.Find("Text").GetComponent<Text>();
    }
    

    public void ChangeText()
    {
        // Меняем текст на следующее сообщение из массива
        textComponent.text = messages[currentIndex];
        currentIndex = (currentIndex + 1) % messages.Length;

        // Если все сообщения были показаны, меняем сцену
        if (currentIndex == 0)
        {
            SceneManager.LoadScene("NewScene"); // Замените "NewScene" на название новой сцены
        }
    }
    public void Click()
    {
        pos++;
    }

    private void Update()
    {
        if (pos >= S.Length)
            pos = 0;

        else
            SR.sprite = S[pos];
    }
}

(некоторые части этого скрипта мне писала нейросеть)


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

Автор решения: Тихирун Ррр
using System.Threading; // В самом начале
bool canClick = true;

public void Click()
{
    if (canClick)
    {
        pos++;
        Thread thread = new Thread(ClickDelay);
        thread.Start();
    }
}
private void ClickDelay()
{
    canClick = false;
    Thread.Sleep(1000) // Время "спячки" в миллисекундах (1000 мс = 1 с)
    canClick = true;
}
→ Ссылка
Автор решения: Тихирун Ррр

Можно не использовать многопоточность, асинхронность и прочее в таком и похожем роде, как в других ответах. Может быть достаточно просто добавить дополнительную переменную в код кнопки, чтобы сохранить задержку. Например, сохранить время последнего нажатия кнопки:

private float nextClick = 0.0f;
private float pressCooldown = 1.0f;
void Click()
    {
        if (Time.time > nextClick)
        {
            nextClick = Time.time + pressCooldown;
            // Любой ваш код при срабатывании нажатия на кнопку
        }
    }

Минусы: максимальное значение - это приблизительно 340282346638528859811704183484516925440, что примерно:

340282346638528859811704183484516925440 секунд

или 3938453086094084025598428049589316 суток

или 10790282427655024727666926163258 лет

или 65395651076697119561617734322 оборотов Нептуна вокруг Солнца

или 44959510115229269698612 оборотов Солнца вокруг центра галактики

или 10790282427655024727666 оборотов млечного пути вокруг своей оси.

В принципе, если вам такое подходит, то можете использовать данный метод.

Другой вариант: хранить время, оставшееся до разблокировки кнопки и, желательно. Например так:

private float delay = 0.0f;
private float pressCooldown = 0.0f;
private void Update()
{
    if (delay >= 0)
        delay -= Time.deltaTime;
}
public void Click()
{
    if (delay < 0)
    {
        delay = pressCooldown;
        //Ваш код
    }
}

Минусы: хуже работает на очень слабых устройствах из-за необходимости постоянно уменьшать значение delay

→ Ссылка