跳至主要内容

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()

返回間隔觸發是否正在運轉中。