DeltaTimer
Coding Style wiki
DeltaTimer 是以外部餵入的 deltaTime 累加驅動的計時器 (遊戲時間),需由擁有者 (MonoBehaviour 的 Update 等) 持續呼叫 UpdateTimer(dt) 驅動;停止餵入即凍結,餵入 Time.deltaTime 時自然跟隨 Time.timeScale 與遊戲暫停。支持 Timer (單次計時)、Tick (循環計時)、Mark (時間標記) 三種模式與時間速度調整。
| 命名空間 | OxGKit.TimeSystem |
| 類型 | public class DeltaTimer |
| 原始碼 | DeltaTimer.cs |
using OxGKit.TimeSystem;
快速上手
using OxGKit.TimeSystem;
using UnityEngine;
public class SkillCooldown : MonoBehaviour
{
private DeltaTimer _cooldown;
private void Start()
{
// 建立並自動播放 (autoPlay: true)
this._cooldown = new DeltaTimer(true);
// 設置 3 秒冷卻
this._cooldown.SetTimer(3f);
}
private void Update()
{
// 必須持續餵入 deltaTime 驅動計時器
this._cooldown.UpdateTimer(Time.deltaTime);
if (this._cooldown.IsTimerTimeout())
{
// 冷卻結束 (時間到)
}
}
}
通用規則
DeltaTimer vs RealTimer
注意 DeltaTimer 的時間僅在被餵入 UpdateTimer(dt) 時前進,餵入 Time.deltaTime 時會跟隨 Time.timeScale 與遊戲暫停 (凍結);RealTimer 則以系統時鐘計算,即使遊戲暫停仍持續計時,請依情境選用 (詳見模組選型)。
播放狀態
重要 計時器建構後預設為停止狀態,需呼叫 Play (或使用建構子 autoPlay: true) 才會開始計時。
提醒 Stop 會清空所有計時數據 (保留時間速度);Reset 會連 同時間速度一併重置為預設值;Pause 僅暫停,可由 Play 續播。
建構子
public DeltaTimer()
public DeltaTimer(bool autoPlay)
建立計時器 (內部會先執行 Reset),autoPlay 為 true 時建立後立即開始計時。
成員
| 成員 | 說明 |
|---|---|
public float deltaTime { get; } | 最後一次透過 UpdateTimer 餵入的 deltaTime。 |
驅動與播放控制
方法總覽
| 方法 | 說明 |
|---|---|
| UpdateTimer | 由擁有者餵入 deltaTime 驅動計時器。 |
| Play | 開始或續播計時。 |
| Pause | 暫停計時 (可續播)。 |
| Stop | 停止並清空計時數據。 |
| Reset | 重置所有狀態 (含時間速度)。 |
| IsPlaying | 是否正在計時。 |
| IsPause | 是否為暫停 (停止) 狀態。 |
| GetTime | 取得計時器當前時間 (秒)。 |
| SetTimeSpeed | 設置時間運轉速度。 |
| GetTimeSpeed | 取得時間運轉速度。 |
UpdateTimer
public void UpdateTimer(float dt)
需要透過 MonoBehaviour 的 Update 持續餵入 deltaTime 驅動計時器 (內部進行累加)。
private void Update()
{
this._deltaTimer.UpdateTimer(Time.deltaTime);
}
重要 停止餵入 = 計時凍結,所有 Timer / Tick / Mark 的判斷皆不會前進。
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._deltaTimer.SetTimer(3f);
this._deltaTimer.Play();