7
10

More than 5 years have passed since last update.

[Unity] Monobehaviourを継承せずにタイマー処理を行う

Posted at

普通にC#のクラスを使うだけなのだけど、「 Unity タイマー処理 」という感じでタイマーについて探すと大体においてStartCouroutineInvokeが出てきて、なかなかこのタイマーにたどり着かなかったのでメモ。

ちなみにMonobehaviourを継承しないとStartCouroutineInvokeが使えないためです。

(Unityではそもそもそうやらねーよ!っていうツッコミがあればお願いします><)

System.Timers.Timerを使う

System.Timers.Timerクラスを使ってタイマーを実現します。
タイマーのセットアップ方法は以下。

using System.Timers;

// ... 中略

void Start() {
    // タイマーを生成
    System.Timers.Timer timer = new System.Timers.Timer(2000f);

    // コンストラクタで設定しない場合は以下で設定可能
    // timer.Interval = 2000f;

    // 繰り返し処理をするか(繰り返す場合は`true`。デフォルト)
    timer.AutoReset = false;

    // コールバックを設定
    timer.Elapsed += (System.Object source, ElapsedEventArgs e) => {
        Debug.Log("The timer has done.");
        // timer.Stop();
        // timer.Close();
        // timer.Dispose();
    };

    // タイマーを実行
    timer.Start();
}

Elapsedが、規定時間経過後に呼び出されます。(繰り返しの場合は規定時間間隔で呼び出される)
あとはその中に必要な処理を記述してやればOKです。

参考:タイマにより一定時間間隔で処理を行うには?(サーバベース・タイマ編)

7
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
10