有2種方法...
第1種:使用Unity提供的StartCoroutine搭配yield return,詳情請看這篇文章
第2種:使用C#提供的Threading.Timer,同這篇作法
P.S.其實還有一種,使用FiexdUpdate()和Time.fixedDeltaTime,但是會受到Time.timeScale影響
一樣建立一個C# script,命名為Test,開始撰寫程式碼~~(scrips都放在Camera上~~)
第1種方法:
using UnityEngine;
using System.Collections;
public class Test : MonoBehaviour
{
private bool timerLock = false;//防止計時器計時到之前被呼叫
private int count = 0;
private void Update ()
{
if(timerLock == false)
{
Debug.Log(count);
StartCoroutine(delay(1f));//延遲1秒
}
}
private IEnumerator delay(float time)
{
timerLock = true;
yield return new WaitForSeconds(time);
count++;
timerLock = false;
}
}
第2種方法:
using UnityEngine;
using System.Collections;
using System.Threading;
public class Test : MonoBehaviour
{
private bool timerLock = false;//防止計時器更新count數值前被重複顯示
private int count = 0;
private void Start()
{
//建立TimerCallback物件,並設定當計時到時要執行的函數
TimerCallback callback = new TimerCallback(Task);
//建立Timer物件,第一個參數為TimerCallback,第二個參數表示要傳給callback的物件
//第三個參數代表要多久之後執行(延遲啟動),第四個參數代表每隔多久執行一次(延遲時間)
//該物件一旦產生就立刻計時了!
Timer timer = new Timer(callback, null, 1000, 1000);
//可以使用以下的方式重新設定延遲啟動和延遲時間
//timer.Change(2000, 2000);
//下面這行的作用為停止計時
//timer.Dispose();
timerLock = true;
}
private void Update ()
{
if(timerLock == false)
{
Debug.Log(count);
timerLock = true;
}
}
//TimerCallback函數使用委派的方式達成,所以傳入和傳出的參數有固定格式
private void Task(object obj)
{
count++;
timerLock = false;
}
}
留言列表