利用委托实现按fixupdate更新倒计时,计时结束后触发委托方法
为TimeBehaviour的unity自定义委托添加触发方法,在计时结束后触发timer类的委托方法,再执行到用户添加的unity自定义委托方法并销毁该组件。
public class TimeBehaviour : MonoBehaviour{[SerializeField] private float duration = 1.0f;[SerializeField] private UnityEvent onTimerEnd = null;private Timer timer;private void Start(){//1.创建计时器timer = new Timer(duration);//2.计时器添加监听 计时结束后执行timer.OnTimerEnd += HandleTimerEnd;}private void HandleTimerEnd(){onTimerEnd.Invoke();//执行手动添加的事件方法Destroy(this);//删除计时器组件}private void Update(){//3.时间更新timer.Tick(Time.deltaTime);}}
public class Timer{public float RemainingSeconds { get; private set; }public Timer(float duration){RemainingSeconds = duration;}public event Action OnTimerEnd;//计时器更新方法public void Tick(float deltaTime){//先判断是否为0,不为零则计时器减去单位物理时间且进入结束方法if (RemainingSeconds ==0f ) { return; }RemainingSeconds -= deltaTime;CheckForTimerEnd();}/// <summary>/// 计时器结束(计时时间<=0) 执行方法/// </summary>private void CheckForTimerEnd(){if(RemainingSeconds > 0f) { return; }RemainingSeconds = 0f;//避免<0sOnTimerEnd?.Invoke();//执行外部监听方法}}
