我正在设计我的第一场比赛,我试图用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.这工作之前,但不工作了,我不知道为什么。任何提示?
TimeManager不是MonoBehaviour,所以它没有更新。你在事实上得到了正确的结果,它在ctor中设置了一次,从未更新过。 – Everts
好的,那么你可以给它一个更新方法,并在需要新值之前从另一个方法调用它。 –
你可以做到,但看看我的答案(我不认为这是最好的答案)。 Unity已经在考虑更新timeSinceLevelLoaded,他所需要的只是部门。如果不是每个帧都进行调用,在Update中运行将会有点浪费。但是,再次,你是对的,添加更新并从MonoBehaviour中调用它是一个解决方案。 – Everts