自定义协成等待
using UnityEngine;
using UnityEngine.Events;

public class CustomWait : CustomYieldInstruction
{
    private UnityAction m_IntervalCallback;
    private float m_StartTime;
    private float m_LastTime;
    private float m_Interval;
    private float m_Time;
    
    public CustomWait(float time, float interval, UnityAction callback)
    {
        m_StartTime = Time.time;
        m_LastTime = Time.time;
        m_Interval = interval;
        m_Time = time;
        m_IntervalCallback = callback;
    }

    //判断协成是否继续等待 false为协成结束
    public override bool keepWaiting
    {
        get
        {
            if (Time.time - m_StartTime >= m_Time)
            {
                return false;
            }
            else if (Time.time - m_LastTime >= m_Interval)
            {
                m_LastTime = Time.time;
                m_IntervalCallback();
            }
            return true;
        }
    }
}

public class TestCustomWait : MonoBehaviour {
    
    IEnumerator Start () {
        yield return new CustomWait(10f, 1f, delegate ()
        {
            Debug.LogError("自定义的协成等待");
        });
    }
}


继承CustomYieldInstruction,实现keepWaiting接口,根据具体情况返回状态。

图片.png


首页 我的博客
粤ICP备17103704号