木骰

一个定时器

Unity中的计时操作依赖于协程,或者有时候放到Update里也可以。哦,还有Invoke

这些计时操作都需要继承MonoBehaviour才可以使用。但是有时候可能会有些类不想让它继承MonoBehaviour,甚至连UnityEngine命名空间都不想包含进来,然而又想有定时的功能,于是我就封装了一个定时器脚本。


public class Alarm : MonoBehaviour {

        Action AlarmAction;
        Func Condition;

        void Start()
        {
            StartCoroutine(LoopAlarm());
        }

        public static void SetAlarmAction( Action action,Func Condition)
        {
            GameObject obj = new GameObject();   
            obj.name = "__Alarm";
            DontDestroyOnLoad(obj);
            Alarm alarm = obj.AddComponent();
            alarm.AlarmAction = action;
            alarm.Condition = Condition;
        }

        IEnumerator LoopAlarm()
        {
            if (Condition != null )
                yield return new WaitUntil(Condition);
            else
                yield return null;
            if (AlarmAction != null )
                AlarmAction();
            Destroy( this.gameObject);
        }
}

调用SetAlarmAction函数,传递一个操作委托和一个条件委托,当条件满足时再执行想要的操作。
用了协程里的WaitUntil,来等待Condition条件满足。
为了避免在跳转场景的时候创建的定时器被销毁掉,将其设置为DontDestroyOnLoad,在定时器触发之后再销毁自己

— 于 共写了776个字
— 文内使用到的标签:

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*