1.什么是延遲函數(shù)
延時執(zhí)行的函數(shù),可以自己設定延時要執(zhí)行的函數(shù)和具體延時的時間,是Monobehaviour基類中實現(xiàn)好的方法
1.Update定時器
在Update等刷新函數(shù)內(nèi)計時,timer += Time.deltaTime 當時間達到預期,執(zhí)行需要延時的方法。需要注意的是,增量時間Time.deltaTime是每幀都不同的浮點數(shù)。計時器不能用 == 去判斷達成條件。需要用 > 或 >= 加一個標志位。以確保函數(shù)能執(zhí)行到且只執(zhí)行一次 Update在 Time.timeScale = 0 時會正常執(zhí)行,但這時Time.deltaTime的值為0。
public class Test : MonoBehaviour
{
public float timer = 0f;
void Update()
{
timer += Time.deltaTime;
if (timer >= 2)
{
Func();
timer = 0f; // 定時2秒
}
}
void Func()
{
Debug.Log("每2秒執(zhí)行一次");
}
}
2.Invoke函數(shù)
Invoke是MonoBehaviour提供的函數(shù),可以延時調用函數(shù),但是,Invoke的調用是在運行時生效的,對于Func函數(shù),很容易導致在代碼審查階段被誤殺—函數(shù)刪除后,編譯不會報錯。Invoke支持重復調用: InvokeRepeating("方法名",延時時長,每次調用間隔時長)
public class Test : MonoBehaviour
{
private float delayTime = 2;
private void Start()
{
Invoke("Func", delayTime);
//InvokeRepeating("DelayFunc",delayTime,cdTime);
}
private void Func()
{
Debug.Log("延遲2s執(zhí)行該函數(shù)");
}
}
取消延時函數(shù):?
//取消延遲函數(shù)
//取消該腳本上的所有延時函數(shù)執(zhí)行
CancelInvoke();
//指定函數(shù)名取消
//只要取消了指定延遲 不管之前該函數(shù)開啟了多少次 延遲執(zhí)行 都會統(tǒng)一取消
CancelInvoke(nameof(DelayDoSomething));
3.協(xié)程?Coroutine
協(xié)程本質是迭代器
public class Test : MonoBehaviour
{
private void Start()
{
StartCoroutine(Show());
}
private IEnumerator Show()
{
yield return new WaitForSeconds(2);
Func();
}
private void Func()
{
Debug.Log("延時2s執(zhí)行");
}
}
4.DoTween 方法實現(xiàn)文章來源:http://www.zghlxwxcb.cn/news/detail-508967.html
DoTween函數(shù)中提供了一個方法dotween.to函數(shù)文章來源地址http://www.zghlxwxcb.cn/news/detail-508967.html
/// <summary>
/// DOTweenTo延時回調
/// </summary>
/// <param name="delayedTimer">延時的時間</param>
/// <param name="loopTimes">循環(huán)次數(shù),0:不循環(huán);負數(shù):無限循環(huán);正數(shù):循環(huán)多少次</param>
public void DOTweenToTest(float delayedTimer, int loopTimes)
{
float timer = 0;
//DOTwwen.To()中參數(shù):前兩個參數(shù)是固定寫法,第三個是到達的最終值,第四個是漸變過程所用的時間
Tween t = DOTween.To(() => timer, x => timer = x, 1, delayedTimer)
.OnStepComplete(() =>
{
print("調用函數(shù)");
})
.SetLoops(loopTimes);
}
到了這里,關于Unity——延時執(zhí)行的幾種方法的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!