2013-10-25 98 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!"); 
    } 
} 

如果你想停止它,只是禁用。如果你想運行它,只需再次啓用它。