跳到主要内容

RealTimer

重要 注意 提醒

Coding Style wiki


RealTimer 是以系统时钟 (DateTime.Now) 计算的真实时间计时器,实例创建当下即为时间基准点,查询式自驱动 (不需外部 Update 喂入);不受 Time.timeScale、游戏暂停与帧率卡顿影响。支持 Timer (单次计时)Tick (循环计时)Mark (时间标记) 三种模式与时间速度调整。

命名空间OxGKit.TimeSystem
类型public class RealTimer
源码RealTimer.cs
using OxGKit.TimeSystem;

快速上手

using OxGKit.TimeSystem;
using UnityEngine;

public class RealCooldown : MonoBehaviour
{
private RealTimer _cooldown;

private void Start()
{
// 创建并自动播放 (autoPlay: true)
this._cooldown = new RealTimer(true);
// 设置 10 秒冷却 (真实时间)
this._cooldown.SetTimer(10f);
}

private void Update()
{
// 查询式检查,不需喂入 deltaTime
if (this._cooldown.IsTimerTimeout())
{
// 冷却结束 (即使期间 Time.timeScale = 0 仍照常倒计时)
}
}
}

通用规则

RealTimer vs DeltaTimer

注意 RealTimer系统时钟为基准,即使游戏暂停 (Time.timeScale = 0) 或程序卡顿仍持续计时;若需要跟随游戏暂停与变速的计时,请改用 DeltaTimer (详见模块选型)。

播放状态

重要 计时器构造后默认为停止状态,需调用 Play (或使用构造函数 autoPlay: true) 才会开始计时。

提醒 Stop 会清空所有计时数据 (保留时间速度);Reset 会连同时间速度一并重置为默认值;Pause 仅暂停,可由 Play 续播。


构造函数

public RealTimer()

public RealTimer(bool autoPlay)

创建计时器并以创建当下的系统时间作为基准点 (内部会先执行 Reset),autoPlay 为 true 时创建后立即开始计时。


播放控制

方法总览

方法说明
GetRealTime获取自实例创建以来的真实经过秒数。
Play开始或续播计时。
Pause暂停计时 (可续播)。
Stop停止并清空计时数据。
Reset重置所有状态 (含时间速度)。
IsPlaying是否正在计时。
IsPause是否为暂停 (停止) 状态。
GetTime获取计时器当前时间 (秒)。
SetTimeSpeed设置时间运转速度。
GetTimeSpeed获取时间运转速度。

GetRealTime

public float GetRealTime()

获取自计时器实例创建以来的真实经过秒数 (以系统时钟 DateTime.Now 计算,不受播放状态与时间速度影响)。

Play

public void Play()

开始计时或自暂停状态续播 (会扣除暂停期间的真实时间,不会跳段)。

Pause

public void Pause()

暂停计时,记录暂停时间点,可由 Play 续播。

Stop

public void Stop()

停止计时并清空所有计时数据 (Timer / Tick / Mark 设置皆归零),但保留时间速度 (timeSpeed)。

Reset

public void Reset()

重置所有状态为默认值 (含时间速度重置为 1),并回到停止状态。

IsPlaying

public bool IsPlaying()

返回是否正在计时中。

IsPause

public bool IsPause()

返回是否为暂停 (非播放) 状态。

GetTime

public float GetTime()

获取计时器的当前累计时间 (秒),计时中会受 SetTimeSpeed 影响;暂停时返回暂停当下的时间。

SetTimeSpeed

public void SetTimeSpeed(float timeSpeed)

设置时间运转速度 (默认 1),影响 GetTime 的时间流速 (连带影响 Timer / Tick / Mark 判断)。

GetTimeSpeed

public float GetTimeSpeed()

获取当前时间运转速度。


Timer 单次计时

依照设置的秒数进行单次倒计时

方法总览

方法说明
SetTimer设置要计时的秒数。
TimerCountdown获取倒计时剩余秒数 (到时返回 0)。
IsTimerTimeout返回计时时间是否已经到了。
GetTimerCountdownRatio获取倒计时时间比率 (1 递减至 0)。

SetTimer

public void SetTimer(float timeSeconds)

设置要计时的秒数 (以当前时间 + 秒数作为触发时间点)。

this._realTimer.SetTimer(10f);
this._realTimer.Play();

TimerCountdown

public float TimerCountdown()

计算触发时间的倒计时剩余秒数,如果已超过设置的触发时间将直接返回 0。

IsTimerTimeout

public bool IsTimerTimeout()

返回计时时间是否已经到了 (超过触发时间点返回 true)。

提醒 时间到后 IsTimerTimeout()持续返回 true,一次性行为请于触发后自行 Stop 或重新 SetTimer

GetTimerCountdownRatio

public float GetTimerCountdownRatio()

获取 Timer 倒计时的时间比率,1 递减至 0,0 = 时间到 (适合驱动进度条 UI)。


Tick 循环计时

持续依照设置的间隔秒数循环触发 (Timeout 后自动重新装填)。

方法总览

方法说明
SetTick设置 Tick 间隔秒数。
GetTick获取设置的 Tick 间隔秒数。
TickCountdown获取本次 Tick 的倒计时剩余秒数。
IsTickTimeout返回 Tick 时间是否已经到了 (自动重新装填)。
GetTickCountdownRatio获取 Tick 倒计时时间比率 (1 递减至 0)。

SetTick

public void SetTick(float tickSeconds)

设置 Tick 间隔秒数,当 IsTickTimeout 触发后仍会持续循环 Tick

// 每 2 秒触发一次 (真实时间)
this._realTimer.SetTick(2f);
this._realTimer.Play();

GetTick

public float GetTick()

获取设置的 Tick 间隔秒数。

TickCountdown

public float TickCountdown()

获取本次 Tick 触发时间的倒计时剩余秒数,如果已超过触发时间将直接返回 0。

IsTickTimeout

public bool IsTickTimeout()

返回 Tick 时间是否已经到了;返回 true 时会自动以当前时间重新装填下一次 Tick,形成循环触发。

private void Update()
{
if (this._realTimer.IsPlaying() &&
this._realTimer.IsTickTimeout())
{
// 每个 Tick 周期触发一次
}
}

重要 IsTickTimeout() 返回 true 时会自动重新装填,该次触发即被“消耗”,同一周期内请仅由单一调用端检查一次,否则触发会被其他调用端吃掉。

GetTickCountdownRatio

public float GetTickCountdownRatio()

获取 Tick 倒计时的时间比率,1 递减至 0,0 = 时间到


Mark 时间标记

标记某个时间点,用于计算经过时间 (秒表用途)。

方法总览

方法说明
SetMark以当前时间设置标记。
GetMark获取标记时间。
GetElapsedMarkTime获取自标记以来的经过时间 (秒)。

SetMark

public void SetMark()

以计时器的当前时间设置标记时间。

GetMark

public float GetMark()

获取标记时间。

GetElapsedMarkTime

public float GetElapsedMarkTime()

获取自上次标记以来的经过时间 (秒),尚未超过标记时间点时返回 0。

this._realTimer.SetMark();

// ... 一段时间后
float elapsed = this._realTimer.GetElapsedMarkTime();