Update()定时执行某方法 - zLulus/My_Note GitHub Wiki

在Update()每帧执行方法中,个别语句多帧执行一次
eg.倒计时

方法1:Time.time

计时不精准
执行间隔可以修改

//下次修改时间
private float nextTime = 0;
private void Update()
{
    if (Time.time >= nextTime)
    {
        Debug.Log($"{nextTime}");
        //间隔1s
        nextTime = Time.time + 1;
    }
}

方法2:Time.deltaTime

计时不精准
执行间隔可以修改

//累计时间
private float totalTime = 0;
private void Update()
{
    //累计每帧间隔
    totalTime += Time.deltaTime;
    if (totalTime >= 1)
    {
        //归零
        totalTime = 0;
    }
}

方法3:InvokeRepeating

适合每隔固定时间(repeatRate不修改)重复执行的任务

//重复调用
//(方法名,第一次执行时间,执行时间间隔)
public void InvokeRepeating(string methodName, float time, float repeatRate);

private void Start()
{
    InvokeRepeating("Timer", 5, 1);
}
private void Timer()
{
    //定时任务

    if (condition==true)
    {
        //取消调用
        CancelInvoke("Timer");
    }
}

补充说明:延迟执行

public void Invoke(string methodName, float time);

方法4:协程