unity入门:记录每局游戏时间
1. 使用 Time.time(受 Time.timeScale 影响)
Time.time 表示从游戏开始到当前帧所经过的时间(秒),它会受到 Time.timeScale 的影响(例如游戏暂停时时间停止增加),代码如下。
using UnityEngine;
public class GameTimeTracker : MonoBehaviour
{
private float startTime; // 记录本局开始的时间
private float currentLevelTime; // 存储本局已进行的时间
void Start()
{
// 在每一局开始时记录开始时间
startTime = Time.time;
}
void Update()
{
// 计算本局已经进行的时间(受timeScale影响)
currentLevelTime = Time.time - startTime;
// 你可以用这个值更新UI或者做其他逻辑判断
// Debug.Log("本局已进行时间: " + currentLevelTime.ToString("F2") + " 秒");
}
// 提供一个方法来获取本局总时间
public float GetCurrentLevelTime()
{
return currentLevelTime;
}
// 在下一局开始前或者本局结束时,可以调用ResetLevelTime重置时间
public void ResetLevelTime()
{
startTime = Time.time;
currentLevelTime = 0f;
}
}
2. 使用 Time.realtimeSinceStartup(不受 Time.timeScale 影响)
如果你希望游戏时间即使游戏暂停(Time.timeScale = 0)也能继续计时,可以使用 Time.realtimeSinceStartup。它表示自游戏启动以来的真实时间,代码如下。
using UnityEngine;
public class RealTimeGameTimeTracker : MonoBehaviour
{
private float startRealTime; // 记录本局开始的真实时间
private float currentLevelRealTime; // 存储本局已进行的真实时间
void Start()
{
// 在每一局开始时记录开始的真实时间
startRealTime = Time.realtimeSinceStartup;
}
void Update()
{
// 计算本局已经进行的真实时间(不受timeScale影响)
currentLevelRealTime = Time.realtimeSinceStartup - startRealTime;
// Debug.Log("本局已进行的真实时间: " + currentLevelRealTime.ToString("F2") + " 秒");
}
public float GetCurrentLevelRealTime()
{
return currentLevelRealTime;
}
public void ResetLevelRealTime()
{
startRealTime = Time.realtimeSinceStartup;
currentLevelRealTime = 0f;
}
}
3. 使用 Time.deltaTime 累计
你也可以在 Update 中通过累计 Time.deltaTime(上一帧到当前帧的时间间隔)来计算总时间。这种方式同样受 Time.timeScale 影响,代码如下。
using UnityEngine;
public class CumulativeTimeTracker : MonoBehaviour
{
private float totalLevelTime; // 累计本局时间
void OnEnable()
{
// 重置累计时间
totalLevelTime = 0f;
}
void Update()
{
// 每帧增加增量时间
totalLevelTime += Time.deltaTime;
// Debug.Log("本局累计时间: " + totalLevelTime.ToString("F2") + " 秒");
}
public float GetTotalLevelTime()
{
return totalLevelTime;
}
public void ResetTotalLevelTime()
{
totalLevelTime = 0f;
}
}
将currentLevelTime(秒数)转换为小时、分钟、秒的格式
代码如下:
// 最简单的转换方法
string formattedTime = TimeSpan.FromSeconds(currentLevelTime).ToString(@"hh\:mm\:ss");