利用委托实现按fixupdate更新倒计时,计时结束后触发委托方法
    为TimeBehaviour的unity自定义委托添加触发方法,在计时结束后触发timer类的委托方法,再执行到用户添加的unity自定义委托方法并销毁该组件。

    1. public class TimeBehaviour : MonoBehaviour
    2. {
    3. [SerializeField] private float duration = 1.0f;
    4. [SerializeField] private UnityEvent onTimerEnd = null;
    5. private Timer timer;
    6. private void Start()
    7. {
    8. //1.创建计时器
    9. timer = new Timer(duration);
    10. //2.计时器添加监听 计时结束后执行
    11. timer.OnTimerEnd += HandleTimerEnd;
    12. }
    13. private void HandleTimerEnd()
    14. {
    15. onTimerEnd.Invoke();//执行手动添加的事件方法
    16. Destroy(this);//删除计时器组件
    17. }
    18. private void Update()
    19. {
    20. //3.时间更新
    21. timer.Tick(Time.deltaTime);
    22. }
    23. }
    1. public class Timer
    2. {
    3. public float RemainingSeconds { get; private set; }
    4. public Timer(float duration)
    5. {
    6. RemainingSeconds = duration;
    7. }
    8. public event Action OnTimerEnd;
    9. //计时器更新方法
    10. public void Tick(float deltaTime)
    11. {
    12. //先判断是否为0,不为零则计时器减去单位物理时间且进入结束方法
    13. if (RemainingSeconds ==0f ) { return; }
    14. RemainingSeconds -= deltaTime;
    15. CheckForTimerEnd();
    16. }
    17. /// <summary>
    18. /// 计时器结束(计时时间<=0) 执行方法
    19. /// </summary>
    20. private void CheckForTimerEnd()
    21. {
    22. if(RemainingSeconds > 0f) { return; }
    23. RemainingSeconds = 0f;//避免<0s
    24. OnTimerEnd?.Invoke();//执行外部监听方法
    25. }
    26. }