一个定时器
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,在定时器触发之后再销毁自己