Нажимается кнопка в игре, происходит действие и начинается отсчет (допустим 10 секунд), bool становится false. После прохождения таймера в 10с, значение bool изменяется на true. Можно снова активировать кнопку.
public class TimedButton : MonoBehaviour
{
public float cooldownTime = 1f;
bool ready = true;
void Update(){
if(/*кнопка нажалась*/ && ready){
StartCoroutine(CooldownHandler())
}
}
IEnumerator CooldownHandler()
{
ready = false;
yield return new WaitForSeconds(cooldownTime);
ready = true;
}
}
Если не требуется отображение времени, можно использовать DelayedCall при помощи внешних библиотек. Например в LeanTween:
//через 5 секунд вызвать код
LeanTweed.DeayedCall(5f, ()=>{ /*некий код*/});
Ассет:
https://assetstore.unity.com/packages/tools/animation/leantween-3595
И документация:
http://dentedpixel.com/LeanTweenDocumentation/classes/LeanTween.html#method_LeanTween.delayedCall
Альтернативный путь 2:Мой ответ -- это просто еще один вариант на тему. Использовать в юнити должно быть аналогично даному примеру. Так же в юнити можно написать и аналогичный класс который будет работать более точно на основе Update() и Time.DeltaTime.
Но чаще, все же, используется подход написанный RiotBr3aker т.к. это банально проще.
пример CountDownTimer-а на форме:
.
Использование:
CountDownTimer timer = new CountDownTimer();//создаем инстанс
timer.SetTime(30,0); //выставляем на 30 минут
timer.StepMs = 33; //Выставляем шаг таймера (как часто вызывается TimeChanged)
//Подписываемся на событие TimeChanged и в нем обновляем значение лейбла
timer.TimeChanged += () => Label1.Text = timer.TimeLeftMsStr;
// Подписываемся на событие окончания таймера и реагируем на него сообщухой
timer.CountDownFinished += () => MessageBox.Show("Timer finished the work!");
timer.Start(); //стартуем
И не забываем вызвать Dispose();
когда таймер уже не нужен
Код таймера:
using System;
public class CountDownTimer : IDisposable
{
public Action TimeChanged;
public Action CountDownFinished;
public bool IsRunnign => timer.Enabled;
public int StepMs
{
get => timer.Interval;
set => timer.Interval = value;
}
private Timer timer = new Timer();
private DateTime _maxTime = new DateTime(1, 1, 1, 0, 30, 0);
private DateTime _minTime = new DateTime(1, 1, 1, 0, 0, 0);
public DateTime TimeLeft { get; private set; }
private long TimeLeftMs => TimeLeft.Ticks / TimeSpan.TicksPerMillisecond;
public string TimeLeftStr => TimeLeft.ToString("mm:ss");
public string TimeLeftMsStr => TimeLeft.ToString("mm:ss.fff");
private void TimerTick(object sender, EventArgs e)
{
if (TimeLeftMs > timer.Interval)
{
TimeLeft = TimeLeft.AddMilliseconds(-timer.Interval);
TimeChanged?.Invoke();
}
else
{
Stop();
TimeLeft = _minTime;
TimeChanged?.Invoke();
CountDownFinished?.Invoke();
}
}
public CountDownTimer(int min, int sec)
{
SetTime(min, sec);
Init();
}
public CountDownTimer(DateTime dt)
{
SetTime(dt);
Init();
}
public CountDownTimer()
{
Init();
}
private void Init()
{
TimeLeft = _maxTime;
StepMs = 1000;
timer.Tick += new EventHandler(TimerTick);
}
public void SetTime(DateTime dt) {
TimeLeft = _maxTime = dt;
TimeChanged?.Invoke();
}
public void SetTime(int min, int sec=0) => SetTime(new DateTime(1, 1, 1, 0, min, sec));
public void Start() => timer.Start();
public void Pause() => timer.Stop();
public void Stop()
{
Pause();
Reset();
}
public void Reset()
{
TimeLeft = _maxTime;
}
public void Restart()
{
Reset();
Start();
}
public void Dispose() => timer.Dispose();
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть проект для моего колледжаВ нем я пытаюсь реализовать MVVM + WPF + EF6
Всем привет! Есть веб приложение с базой студентов (id, Имя, возраст, сумма баллов) Хочу сделать выборку из базы 5 студентов с самыми высокими...
В ResX Resource Manager создал переводы всех строк (Neutral,en,ru,ru-RU)Git показал, что файлы добавились
может кто-то сталкивался с подобным тестированием и может помочь