Files
2026-02-21 16:45:37 +08:00

86 lines
1.7 KiB
C#

using UnityEngine;
public static class vp_TimeUtility
{
private static float m_MinTimeScale = 0.1f;
private static float m_MaxTimeScale = 1f;
private static bool m_Paused = false;
private static float m_TimeScaleOnPause = 1f;
public static float InitialFixedTimeStep = Time.fixedDeltaTime;
public static float TimeScale
{
get
{
return Time.timeScale;
}
set
{
value = ClampTimeScale(value);
Time.timeScale = value;
Time.fixedDeltaTime = InitialFixedTimeStep * Time.timeScale;
}
}
public static float AdjustedTimeScale
{
get
{
return 1f / (Time.timeScale * (0.02f / Time.fixedDeltaTime));
}
}
public static bool Paused
{
get
{
return m_Paused;
}
set
{
if (value)
{
if (!m_Paused)
{
m_Paused = true;
m_TimeScaleOnPause = Time.timeScale;
Time.timeScale = 0f;
}
}
else if (m_Paused)
{
m_Paused = false;
Time.timeScale = m_TimeScaleOnPause;
m_TimeScaleOnPause = 1f;
}
}
}
public static void FadeTimeScale(float targetTimeScale, float fadeSpeed)
{
if (TimeScale != targetTimeScale)
{
targetTimeScale = ClampTimeScale(targetTimeScale);
TimeScale = Mathf.Lerp(TimeScale, targetTimeScale, Time.deltaTime * 60f * fadeSpeed);
if (Mathf.Abs(TimeScale - targetTimeScale) < 0.01f)
{
TimeScale = targetTimeScale;
}
}
}
private static float ClampTimeScale(float t)
{
if (t < m_MinTimeScale || t > m_MaxTimeScale)
{
t = Mathf.Clamp(t, m_MinTimeScale, m_MaxTimeScale);
Debug.LogWarning("Warning: (vp_TimeUtility) TimeScale was clamped to within the supported range (" + m_MinTimeScale + " - " + m_MaxTimeScale + ").");
}
return t;
}
}