2015-12-12 51 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