虚幻引擎中的节流与防抖

最近研究虚幻引擎(Unreal Engine,UE),打算从Web开发转型成游戏开发。日后会不定期发布和游戏开发相关的经验总结,由浅入深。


UE的学习主要三大块:GUI操作,蓝图,C++。虽然对于外行人来说不学C++也能做UE开发,但计算机专业的同学可以在最短的时间内掌握UE引擎,因为UE编辑器的GUI以及可视化语言蓝图都包含着很多“软件哲学”,似乎每一处的设计都散发着亲切感,让人一目了然。就像微信GUI的设计理念是让人“不用教就会用”,UE编辑器的GUI也渗透着许多行业设计的默契和习惯,蓝图实质上则是图形化的C++。

废话不多说,蓝图API中和计时器线程相关的函数有2个:Delay和Retriggerable Delay,经过研究,它们分别是节流延迟和防抖延迟。

Delay:节流

https://docs.unrealengine.com/en-US/BlueprintAPI/Utilities/FlowControl/Delay/index.html

Delay函数是自带节流属性的计时器,表面上它能让你”睡眠“一段时间后再执行下一个函数,背后还默默地给输入做了节流(throttle),文档上说:计时期间再次调用会被忽略,也就是给单位时间内函数调用次数设限。我们来做个实验:

我们来看这个线程:当按空格键后打印”Hello“,紧接着睡1秒,然后打印”Hello World“。游戏开始后疯狂按空格,控制台变成这样:

可以看到,按了多少空格就打印多少“Hello”,但1秒之内至多打印1个“Hello World”,因为Delay方法做了节流。

Retriggerable Delay:防抖

https://docs.unrealengine.com/en-US/BlueprintAPI/Utilities/FlowControl/RetriggerableDelay/index.html

Retriggerable Delay方法从字面上看是“可再触发”的延迟,文档上说计时期间如果再触发会重置计时器(清零),重新计时,直到规定时间内没有触发才算完成。这不就是防抖(debounce)吗,于是我们再做一个实验:

还是疯狂按空格,然后停止,控制台输出如下:

可以看出,只有最后一次输出了“Hello World”,意味着只有最后一个空格完成了Retriggerable Delay,这就是防抖。

总结:

学习虚幻引擎的API是一个漫长的过程,如何快速记忆决定了学习效率。人脑是有过目不忘的能力的,只是很难调用这个功能,能否调用它在于你能否成功“说服”自己的大脑,让大脑相信某个信息是有意义并值得存储的,然后大脑才会“秒记”这个信息。

建立知识点关联就是一种向大脑证明意义的绝佳方式,本文中,即使不提防抖节流的概念,相信你也能理解Delay的含义,但将Delay和已知的知识点联系起来,你就可以瞬间将它铭记。

猜你喜欢

转载自blog.csdn.net/github_38885296/article/details/108525790