IntervalTimer
Coding Style wiki
IntervalTimer 是類 JavaScript setInterval 的間隔觸發計時器 (UniTask 驅動),每隔指定毫秒觸發一次 Action,支持 ignoreTimeScale (是否忽略 Time.timeScale) 與 SetIntervalOnThread (切至執行緒池運轉);也可透過靜態管理器 IntervalSetter 統一建立與管理。
| 命名空間 | OxGKit.TimeSystem |
| 類型 | public class IntervalTimer |
| 原始碼 | IntervalTimer.cs |
using OxGKit.TimeSystem;
快速上手
using OxGKit.TimeSystem;
var intervalTimer = new IntervalTimer();
// 每 1000 毫秒觸發一次
intervalTimer.SetInterval(() =>
{
// 週期性工作
}, 1000);
// 功能結束時務必停止
intervalTimer.StopInterval();
通用規則
- 首次觸發發生於第一個間隔之後 (先等待、後觸發),之後持續循環。
- 同一實例已在運轉中時,再次呼叫
SetInterval/SetIntervalOnThread無作用,需先 StopInterval 再重新設置。 ignoreTimeScale預設 false:間隔以 Unity 縮放時間計算 (Time.timeScale = 0時不會觸發);設為 true 則以未縮放時間計算。
重要 間隔觸發為 UniTask 迴圈,擁有者 (功能/場景) 結束時務必呼叫 StopInterval 停止,否則迴圈會持續運轉;迴圈中回調擲出例外時會自動停止並重新擲出。
建構子
public IntervalTimer()
建立間隔觸發計時器 (建立後需再呼叫 SetInterval 啟動)。
方法
方法總覽
| 方法 | 說明 |
|---|---|
| SetInterval | 啟動間隔觸發 (每隔指定毫秒觸發一次 Action)。 |
| SetIntervalOnThread | 啟動間隔觸發並切換至執行緒池運轉。 |
| StopInterval | 停止間隔觸發。 |
| IsRunning | 是否正在運轉中。 |
SetInterval
public void SetInterval(Action action, int milliseconds, bool ignoreTimeScale = false)
啟動間隔觸發,每隔 milliseconds 毫秒觸發一次 action;已在運轉中時再次呼叫無作用。
// 每 500 毫秒觸發一次,忽略 Time.timeScale
intervalTimer.SetInterval(() => { /* ... */ }, 500, true);
SetIntervalOnThread
public void SetIntervalOnThread(Action action, int milliseconds, bool ignoreTimeScale = false)
啟動間隔觸發並先切換至執行緒池 (UniTask.SwitchToThreadPool) 運轉;已在運轉中時再次呼叫無作用。
重要 回調可能於非 Unity 主執行緒執行,請勿直接存取 UnityEngine 物件 (需自行封送回主執行緒)。
注意 WebGL 平台不支持多執行緒,於 WebGL 上不會進行切換 (行為等同 SetInterval)。
StopInterval
public void StopInterval()
停止間隔觸發並取消內部的 CancellationTokenSource;停止後可再次 SetInterval 重新啟動。
IsRunning
public bool IsRunning()
返回間隔觸發是否正在運轉中。