Unity计时器在级别重启时不增加

时间:2019-03-04 16:36:19

标签: unity3d time

我认为很简单的事情被证明是困难的。我有一个计时器,可以在几秒钟内告诉我游戏已经进行了多长时间,并且我希望它在每次重新启动游戏时都重新启动。这是我写的代码。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TimeManager : MonoBehaviour {

    public static int time= (int)Time.time;


    private void Start()
    {
        time = 0;
    }

    public void Update()
    {
        time +=  (int) Time.time;

    }

}

第一次加载游戏时,它运行良好,然后在玩家死亡时重新启动游戏时,它似乎不再移动,并停留在与之前比赛相同的值上。

2 个答案:

答案 0 :(得分:1)

默认时间变量

Unity具有一些内置的Time变量,可以完成相同的任务。

例如:

  • Time.realtimeSinceStartup(它将从开始游戏起以秒为单位)
  • Time.timeSinceLevelLoad(自加载场景以来的时间,以秒为单位)

参考:https://docs.unity3d.com/ScriptReference/Time.html

自定义脚本:

如果您想让脚本来处理时间,那么您需要更改的内容很少:

  • 在“更新”函数中,增量应为Time.deltaTime而不是Time.time。 (Time.deltaTime将给出从上一帧开始的时间)
  • 时间变量的数据类型应为浮点型,否则将Time.deltaTime转换为整数将始终为零。

    public class TimeManager : MonoBehaviour 
    {    
        public static float time = 0;
    
        void Start()
        {
            time = 0;
        }
    
        void Update()
        {
            time += Time.deltaTime;
        }
    }
    

答案 1 :(得分:-1)

仅对与我有相同问题的任何人进行更新。我用这段代码解决了这个问题。

using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class TimeManager : MonoBehaviour
{
    public static int time=0;

    private void Start()
    {
        time = (int)Time.timeSinceLevelLoad;
    }

    public void Update()
    {
        time = (int)Time.timeSinceLevelLoad;
        Debug.Log("time" + time);
    }
}

这将计算每次加载关卡以来的时间,因此当我的玩家死亡并重新启动时,它会从0开始计数。