UPL5-5——延迟执行函数相关

Invoke 和 InvokeRepeating 存在的问题

Unity 中自带的延迟执行函数 Invoke​ 和定时调用函数 InvokeRepeating
它们的使用可以非常简单的让我们达到目的,但是它们会有明显的性能和可维护性问题
它们的主要问题有以下几点:

  1. 通过字符串查找(反射)的方式调用函数,性能消耗较高
  2. 可读性差,通过字符串无法直接跳转到函数排查问题
  3. 无法传参,调用这两个方法时无法传递参数,必须用成员变量来传值
  4. 控制不便,我们想要停止他们,需要通过 CancelInvoke 方法传入字符串关闭

等等

利用协程替代 Invoke 和 InvokeRepeating

做法:利用协同程序来完成延迟执行逻辑或定时调用逻辑需求

  • 优点:支持传参,更易管理,更加灵活
  • 缺点:协程有额外开销

利用 UniTask 替代 Invoke 和 InvokeRepeating

做法:利用 UniTask​ 中的API,比如 UniTask.Delay 来完成延迟调用

  • 优点:开销比起协同程序更低,结合 async​ 和 await 可读性更好
  • 缺点:额外学习成本,需要掌握 UniTask 知识点

自定义 Timer 管理器延迟执行方法

做法:自定义计时管理器,类似实现可见:UFL10——计时器模块

  • 优点:统一管理计时相关逻辑,可控性强,可根据需求自定义功能,自定义优化方向
  • 缺点:需要额外实现逻辑代码