2014-05-01 89 views
0

我有一個問題,在Unity中的GetKeyDown。即使日誌似乎在每次按下按鈕時都會檢測到,但它並不總是執行代碼。似乎在快速按下按鈕時會發生更多情況。我想要的是減少「計數」直到零,然後在x秒後重新填充到其初始值。GetKeyDown行爲奇怪,Unity,C#

int counting = 5; 

void Update(){ 

    if(Input.GetKeyDown(KeyCode.O) && counting > 0){ 
     counting --; 
    } 
    else if(counting <= 0) 
    { 
     Invoke ("ResetCounting",3); 
    } 

    print (counting); 
} 

void ResetCounting() 
{ 
    counting = 5; 
} 

回答

3

如果保持敲擊鍵的同時counting已經0,你會觸發ResetCounting()幾次。當counting被重置爲5時,隊列中仍有一些呼叫爲ResetCounting(),並將重置counting,但仍大於0

您需要添加一個檢查確保ResetCounting()只觸發一次。

int counting = 5; 
bool invokedReset = false; 

void Update(){ 

    if(Input.GetKeyDown(KeyCode.O) && counting > 0){ 
     counting --; 
    } 
    else if(counting <= 0 && !invokedReset) 
    { 
     Invoke ("ResetCounting",3); 
     invokedReset = true; 
    } 

    print (counting); 
} 

void ResetCounting() 
{ 
    counting = 5; 
    invokedReset = false; 
} 
+0

當然,當你說出這些話時,現在有很多意義。謝謝! – user3412636