2016-05-15 77 views
0

我正在創建一個遊戲,玩家可以將某些任務分配給npc,並且隨着任務的複雜性,需要大量的時間(複雜任務需要5分鐘,簡單任務需要1分鐘) 。爲了達到這個目的,我用Time.deltatime創建了一個計時器。Unity3d Time.deltaTime和幀速率問題

Starttime = Starttime + Time.Deltatime; 

但按照統一的文檔的DeltaTime是兩幀之間的差異所以現在在PC遊戲在60幀運行,所以它會花費60幀完成一次分鐘,但在移動它花費的時間比需要的時間更長,所以,請誰能告訴我如何解決這個問題

+0

修復呢?你從文檔中複製/粘貼一些東西,陳述一個要求,但沒有提出問題,似乎認爲我們爲你編寫程序? – TomTom

+0

任務時間應該發生什麼?如果你只需要一個腳本工作,然後保存開始時間,並檢查時間通過... – Adi

+0

我想你錯過了文檔。 'Time.deltaTime'是爲了使你的遊戲幀率無關,所以無論你運行多少幀,它都需要相同的時間。例如。對於60 fps的1分鐘任務,將需要3600幀,在30 fps時需要1800幀,但仍然是1分鐘。 –

回答

2

不要使用Time.deltaTime或任何類似的功能,永遠不會出於任何原因。

對於初學者團結,所有的計時器和與時間有關的所有問題,只需使用調用

您的代碼看起來就像這樣......

void Start() 
{ 
Debug.Log("user begins task .. must complete in 60 seconds"); 
Invoke("TimeIsUpForUser", 60f); 
} 

private void TimeIsUpForUser() 
{ 
Debug.Log("time's up! user must be finished by now"); 
} 

就這麼簡單。

舉例來說,你的整個代碼可能是這個樣子..

void Start() 
{ 
ShowMiniPuzzleOnScreen(); 
Invoke("TimeIsUpForUser", 60f); 
} 

private void UserHasPlacedFinalPieceOfPuzzle() 
{ 
MessageScreen("Congratulations! You get 100 coins!"); 
balance += 100; 
CancelInvoke("TimeIsUpForUser"); 
} 

private void TimeIsUpForUser() 
{ 
HideMiniPuzzle(); 
PlaySadMusic(); 
MessageScreen("You suck! You are too slow. You lose 50 points."); 
balance -= 50; 
} 
+0

感謝Joe Blow的幫助,但我想我誤解了統一文檔,請告訴我,如果Time.deltaTime是爲了使遊戲框架獨立,那麼無論它運行多少幀,它都需要相同的時間或不是? –

+0

歡呼一定要記得使用** Invoke **。 @paulp – Fattie

+1

謝謝Joe Blow。 –