2015-06-04 68 views
0

我想計算時間到10秒,然後使countToTen = 0並再次啓動循環,直到再次達到10。就目前而言,團結是粉碎,我不知道爲什麼。循環堆棧時間(C#,Unity)

你能幫我嗎?

public float countToTen;  
void Update(){ 
     do{ 
      if(countToTen<=10){ 
       countToTen=(int)(Time.time%60f); 
      } 
     } 
     while(countToTen<=10);} 
+0

'Time.time'的價值是什麼?我想象的模數正在使它陷入無限循環。你應該讓你的遊戲使用自己的循環,然後只要超過閾值就將計數重置爲0。然後您可以定期遞增 – Sayse

+0

您是否正確標記了此問題?請注意,對於Unity遊戲引擎,[tag:unity]標記*不是*,我懷疑這是您的目標。 –

+0

一般性評論 - 如果您的do受到與while相同的條件支配,則不需要使用do while循環。只要使用while(countToTen <= 10)... –

回答

0

這不是正確的做法。我的意思是,你可以做到這一點,但是當你有一把雪橇錘的時候,你正在使用鑿子。

IEnumerator myFunction(float s) 
{ 
    Debug.log ("waiting..."); 
    yield return new waitForSeconds(s); 
    Debug.log("tada!"); 
} 

//call me on onclick or whenever, but not in update() ^^ 
void startFunction() 
{ 
    StartCoroutine(myFunction(10)); 
} 

void update() 
{ 

} 
+0

也許我不夠精確。我有一個腳本,在屏幕上顯示文本行。在另一個腳本中(我的第一篇文章中),我有一個計時器,計算秒和分鐘並在GUI上顯示它。我的想法是每隔10秒在屏幕上顯示一段文字,並檢查它是否按照我的意願工作,我將它放在Update()中。 – Inkwizytor

+0

這是錯誤的模式:我強烈建議你在繼續遊戲之前拾取一本C#書籍,否則最終會出現很多意大利麪條代碼,這是使用update的一種非常自然的衝動,但相信我,這是錯誤的。在你的情況下,只需要一個協程每10秒就做一次你想做的事情,另一個腳本在Start()上調用它。然後,您可以使用首選方法來控制第一個腳本(通過sendmessage或通過變量或其他)。不要使用更新並計算Time.deltatime來完成定時器,它最終會搞亂你的代碼。 – Andrea

+0

感謝您的通知。我現在只在更新中使用計時器,僅用於開發目的。稍後,我將刪除此代碼。只有我才能看到其他腳本(現在將使用哪個腳本)。我從來不知道有像協同程序這樣的東西,現在我的生活會更容易。 – Inkwizytor

0

該循環將阻止更新,因爲時間不會改變,直到您的更新功能完成執行。相反,我想你想要做的是數10秒鐘然後做點什麼,然後再等10秒。

這樣做的統一方式是co-routine。基本上,你做這樣的事情:

IEnumerator WaitThenDoSomething(float WaitTime) { 
    while(running) 
    { 
     yield return new WaitForSeconds(WaitTime); 
     DoSomething(); 
    } 
} 

哪裏DoSomething()是,將獲得每10秒執行,直到running的功能設置爲false。你可以開始用下面的代碼運行這在Start()方法:

StartCoroutine(WaitThenDoSomething(10.0)); 
+0

完美的作品。非常感謝你。我真的需要購買一本C#基礎知識的書;)我將代碼發佈在對我的問題的評論中。 – Inkwizytor

0

就是這樣,完美的工作。謝謝你們幫助我。

using UnityEngine; 
using System.Collections; 
using System.IO; 
using UnityEngine.UI; 
using System.Collections.Generic; 

public class TextReadFromFile : MonoBehaviour { 

    GameObject player; 
    public TextAsset wordFile;        // Text file (assigned from Editor) 
    private List<string> lineList = new List<string>();  // List to hold all the lines read from the text file 
    Text text; 
    Timer timer; 
    PlayerHealth playerHealth; 

    void Awake() 
    { 
     player = GameObject.FindGameObjectWithTag ("Player"); 
     playerHealth = player.GetComponent <PlayerHealth>(); 
     text = GetComponent <Text>(); 
    } 
    void Start() 
    { 
     ReadWordList(); 
     Debug.Log("Random line from list: " + GetRandomLine()); 

     StartCoroutine (Count(2.0f)); 

     } 

    public void ReadWordList() 
    { 
     // Check if file exists before reading 
     if (wordFile) 
     { 
      string line; 
      StringReader textStream = new StringReader(wordFile.text); 

      while((line = textStream.ReadLine()) != null) 
      { 
       // Read each line from text file and add into list 
       lineList.Add(line); 
      } 

      textStream.Close(); 
     } 
    } 

    public string GetRandomLine() 
    { 
     // Returns random line from list 
     return lineList[Random.Range(0, lineList.Count)]; 
    } 

    IEnumerator Count(float WaitTime){ 

     while(playerHealth.currentHealth >= 0) 
     { 
      yield return new WaitForSeconds(WaitTime); 
      text.text = GetRandomLine(); 
     } 
} 


}