2013-10-25 2 views
0

Я создал событие таймера, которое, как предполагается, запускается всякий раз, когда мой таймер достигает поставленной цели. Однако, когда я впервые запускаю свой таймер, он достигает определенной длины, а затем просто останавливается. Однако, если я снова запускаю таймер, он работает по назначению, и я понятия не имею, где это происходит.Таймер единства останавливается при первом вызове

Не могли бы вы взглянуть на мой код таймера, чтобы узнать, где эта проблема может возникнуть? Я искал день, но не могу указать.

Ниже приведен пример, когда я делаю что-то с моим таймером в своем основном классе. Некоторые вещи были опущены для ясности.

public float start_time; 
public float look_at_time; 
public float end_time; 
private bool track_timer = false; 

//this is called from a different class but acts as my start method 
public void Setup() 
{ 
    start_time  = 0; 
    running_time = 0;  

    ResetTimer(); 
} 

void Update() 
{ 
    bool updateTimer = (track_timer && lastHitObject != null); 
    Check(updateTimer); 
      MyMethod(); 
} 

void ResetTimer() 
{ 
    start_time  = 0.0f; 
    running_time = 0f; 
    track_timer  = false; 
} 
void MyMethod() 
{ 
    if(argument 1) 
    { 
    if(argument 2) 
    { 
     track_timer = false; 
    } 
    } 

else 
    track_timer = false; 
} 

void Check(bool updateTimer) 
{ 
    if(updateTimer) 
    { 
     start_time  += Time.deltaTime; 
     running_time += Time.deltaTime; 
     if (running_time >= end_time) 
     { 
      track_timer = false; 
     } 
    } 
    else 
     end_time = Time.time; 
} 
+0

Могу ли я сделать предложение? Вы разместили этот же скрипт по нескольким вопросам, каждый из которых имеет другую проблему, и поэтапно объединил его с нашими ответами. Возможно, пришло время отступить и немного перепроектировать/реорганизовать ваш код, а затем задать более целенаправленный вопрос. – Jerdak

ответ

0

Я действительно не понимаю, что вы делаете в своем коде, попробуйте его упростить! Вы можете использовать Invoke, со вторым аргументом времени, или сделать что-то вроде этого:

class Timer : MonoBehaviour 
{ 
    public float SecondsToWait; 

    private float timeCounter; 

    void OnEnable() { 
     timeCounter = 0; 
    } 

    void Update() { 
     timeCounter += Time.deltaTime; 

     if(timeCounter >= SecondsToWait) 
     { 
      enabled = false; //Disable this object 
      doMyMethod(); 
     } 
    } 

    private void doMyMethod() { 
     Debug.Log("Doing stuff!"); 
    } 
} 

Если вы хотите, чтобы остановить его, просто отключить. Если вы хотите запустить его, просто включите его снова.

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