2016-03-13 1 views
0

В Scene в Unity3D, как я могу заставить код реагировать на действие только один раз в секунду в MonoBehaviour в runloop?В единстве ограничьте реакцию на действие только один раз в 1 секунду?

+0

Возможными дублировать [Как заблокировать скорость события без использования Rx Framework] (http://stackoverflow.com/questions/21400514/how-to-throttle-the-speed-of-an-event-without-using-rx -framework) –

+0

'private DateTime _nextAllowedTime = DateTime.MinValue; public void YourMethod() {if (DateTime.Now <_nextAllowedTime) {return; } if (Input.GetMouseButtonUp (0)) {оценка ++; _nextAllowedTime = DateTime.Now.AddSeconds (1); }} ' – Corak

+0

Вы используете Invoke и InvokeRepeating для таймеров в Unity – Fattie

ответ

1

Если вы находитесь в среде Unity3D, прекратите читать и смотрите на Joe Blow's answer. В противном случае продолжайте чтение.


0 Вы можете использовать команду Stopwatch, чтобы рассказать о ваших событиях. Создайте один Stopwatch как частное поле/свойство и инициализировать его из конструктора:

public YourClass() 
{ 
    ScoreStopwatch = new Stopwatch(); 
    ScoreStopwatch.Start(); 
    // Other initialization... 
} 

private Stopwatch ScoreStopwatch { get; set; } 

Затем вы можете использовать Elapsed свойство, чтобы получить время с момента последнего увеличения партитуры, как это:

if(Input.GetMouseButtonUp(0) && ScoreStopwatch.Elapsed.TotalSeconds > 1) 
{ 
    score++; 
    ScoreStopwatch.Reset(); 
    ScoreStopwatch.Start(); 
} 
+0

Я получаю ошибку: '' Тип 'System.Diagnostics.Stopwatch 'не содержит определения для' Restart' и не может быть найден метод расширения 'Restart 'типа' System.Diagnostics.Stopwatch' (вам не хватает директивы using или ссылки на сборку?) '' –

+0

@Brown Ах, это будет потому, что ['Stopwatch.Restart'] (https://msdn.microsoft.com/en-us/library/system.diagnostics.stopwatch.restart (v = vs.110) .aspx) был добавлен только в .NET 4.0, вы должны использовать более старую версию. Я обновил свой код, чтобы не использовать какие-либо новые методы. –

+0

Что. Net Version вы используете? Похоже, [Перезагрузка] (https://msdn.microsoft.com/de-de/library/system.diagnostics.stopwatch.restart.aspx) доступна с 4.0. – Corak

Смежные вопросы