Unity延時執行的多種方法小結
最開始接觸unity的時候,我做延時都是在update裡做計時器。後來才發現,我屮艸芔茻,還有這麼多種更方便延時執行的方式。現在我們就來捋一捋。
本文列舉的有以下四種,如有錯漏,歡迎補充指正
✨ | Update | Invoke | 協程 | DoTween |
支持參數傳入 | ✖️ | ✖️ | ✔️ | ✖️ |
下表是在不同情況下各方案的執行狀態
✨ | Update | Invoke | 協程 | DoTween |
Time.timeScale = 0 | ✔️ | ✖️ | ✖️ | ✔️ |
activeSelf == false | ✖️ | ✔️ | ✖️ | ✔️ |
enabled == false | ✖️ | ✔️ | ✔️ | ✔️ |
destroy | ✖️ | ✖️ | ✖️ | ✔️ |
Update計時器
在Update等刷新函數內計時,timer += Time.deltaTime 當時間達到預期,執行需要延時的方法。 需要註意的是,增量時間Time.deltaTime是每幀都不同的浮點數。計時器不能用 == 去判斷達成條件。需要用 > 或 >= 加一個標志位。以確保函數能執行到且隻執行一次 Update在 Time.timeScale = 0 時會正常執行,但這時Time.deltaTime的值為0。需要這時使用計時器的話,可以使用Time.realtimeSinceStartup
private float delayTime = 1; private float timer = 0; private bool executed = false; void Update(){ if (executed == false){ timer += Time.deltaTime; if (timer >= 1){ executed = true; DelayFunc(); } } } private void DelayFunc(){ print("執行測試函數"); }
Invoke
Invoke() 方法是 Unity3D 的一種委托機制。使用簡單便捷。 但是這個傢夥和其他方式不太一樣的是,隱藏物體或將腳本enabled 設置為false,並不會中斷Invoke的執行。 Invoke支持重復調用: InvokeRepeating(“方法名”,延時時長,每次調用間隔時長)
private float delayTime = 5; private void Start(){ Invoke("DelayFunc",delayTime); //InvokeRepeating("DelayFunc",delayTime,cdTime); } private void DelayFunc(){ print("執行測試函數"); }
協程
協程本質是迭代器,寫法麻煩,但很好用。可以延時固定時間,也可以延時固定幀。
點擊這裡是一個協程的管理類,支持暫停繼續等功能
private float timer = 0; private void Start() { StartCoroutine("DelayFunc"); Time.timeScale = 0; } IEnumerator DelayFunc() { while ( timer < 30) { yield return new WaitForSeconds(1); timer++; print("執行測試函數"+timer); } }
DoTween
如果你使用UGUI,那麼你一定知道DoTween。DoTween是很常用的簡單動畫插件,但有時候我們能用它來做一些奇怪的操作。比如延時函數 執行後隻能通過 seq.Pause();seq.Kill();等自帶函數關閉。 Time.timeScale = 0,隱藏物體,禁用腳本,刪除物體等情況下,均繼續執行方法。
private void Start() { seq = DOTween.Sequence(); seq.AppendInterval(5); seq.AppendCallback(DelayFunc); seq.SetAutoKill(false); seq.SetUpdate(true);//設為true時可在Time.timeScale=0的情況下正常執行 } void DelayFunc() { print("執行測試函數"); }
到此這篇關於Unity延時執行的多種方法小結的文章就介紹到這瞭,更多相關Unity延時執行內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Unity計時器功能實現示例
- Python實現C#代碼生成器應用服務於Unity示例解析
- Unity中協程IEnumerator的使用方法介紹詳解
- Unity實現坦克模型
- Unity2D實現遊戲回旋鏢