UPL5-5——延迟执行函数相关
UPL5-5——延迟执行函数相关
Invoke 和 InvokeRepeating 存在的问题
Unity 中自带的延迟执行函数 Invoke 和定时调用函数 InvokeRepeating
它们的使用可以非常简单的让我们达到目的,但是它们会有明显的性能和可维护性问题
它们的主要问题有以下几点:
- 通过字符串查找(反射)的方式调用函数,性能消耗较高
- 可读性差,通过字符串无法直接跳转到函数排查问题
- 无法传参,调用这两个方法时无法传递参数,必须用成员变量来传值
- 控制不便,我们想要停止他们,需要通过
CancelInvoke方法传入字符串关闭
等等
利用协程替代 Invoke 和 InvokeRepeating
做法:利用协同程序来完成延迟执行逻辑或定时调用逻辑需求
- 优点:支持传参,更易管理,更加灵活
- 缺点:协程有额外开销
利用 UniTask 替代 Invoke 和 InvokeRepeating
做法:利用 UniTask 中的API,比如 UniTask.Delay 来完成延迟调用
- 优点:开销比起协同程序更低,结合
async 和await可读性更好 - 缺点:额外学习成本,需要掌握
UniTask知识点
自定义 Timer 管理器延迟执行方法
做法:自定义计时管理器,类似实现可见:UFL10——计时器模块
- 优点:统一管理计时相关逻辑,可控性强,可根据需求自定义功能,自定义优化方向
- 缺点:需要额外实现逻辑代码
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 文KRIFE齐的博客!
