2015-12-12 72 views
0

我正在設計我的第一場比賽,我試圖用5秒的步驟創建一個時間變量(比實時慢5倍)。Unity3D腳本編寫timeSinceLevelLoad變量不返回c#

這是在那裏我有GUI(粘貼只有相關部分):

using UnityEngine; 
using Assets.Code.Interfaces; 
using Assets.Code.Scripts; 
using Assets.Code.PowerPlants; 
namespace Assets.Code.States 

Debug.Log (TimeManager.gametime); 
public void ShowIt() 
    { 

GUI.Box (new Rect (Screen.width - 650, 10, 100, 25), TimeManager.gametime.ToString()); // GAME TIME HOURS 
} 

這是我的遊戲時間的計算:

using System; 
using UnityEngine; 
namespace Assets.Code.Scripts 
{ 
    public class TimeManager 
    { 
     public static int gametime; 
     public TimeManager() 
     { 
     gametime = (int)Time.timeSinceLevelLoad/5; 
     } 
    } 
} 

我沒有錯誤,但該值的遊戲時間總是0.這工作之前,但不工作了,我不知道爲什麼。任何提示?

回答

1
namespace Assets.Code.Scripts 
{ 
    public class TimeManager 
    { 
     public static int gametime 
     { 
      get { return (int)Time.timeSinceLevelLoad/5; } 
     } 
    } 
} 

ctor對您的情況沒有用,只需添加一個返回所需值的屬性即可。

1

我認爲,這是因爲在TimeManager的構造函數中只設置了gametime一次。所以,它永遠不會被更新。把它放在更新,然後它會工作。

+0

TimeManager不是MonoBehaviour,所以它沒有更新。你在事實上得到了正確的結果,它在ctor中設置了一次,從未更新過。 – Everts

+0

好的,那麼你可以給它一個更新方法,並在需要新值之前從另一個方法調用它。 –

+0

你可以做到,但看看我的答案(我不認爲這是最好的答案)。 Unity已經在考慮更新timeSinceLevelLoaded,他所需要的只是部門。如果不是每個幀都進行調用,在Update中運行將會有點浪費。但是,再次,你是對的,添加更新並從MonoBehaviour中調用它是一個解決方案。 – Everts