作者:silver bullet
链接:zhuanlan.zhihu.com/p/372699323
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
大家好,好几个月没写文章了,这次来水一篇计时器。
计时器的逻辑很简单,大学学过编程的都知道怎么写,本文主要还是在契合 Niagara 特性的基础上设计了一个可复用的计时器模块,这样大家需要用的时候直接调用 Niagara Function 就好了。
为什么我们需要计时器呢?因为很多时候我们写的模块并不能很流畅的运行,需要做一些状态切换,计时器就是一种简单的方法,让我们粗暴地避开 Bug,激活的时候运行另一个模块一段时间,然后再切换回来,还有就是计时器可以用来模拟 GPU 粒子所没有的 event(事件),通过在一个发射器给一个布尔值,另一个发射器读取,用计时器来计时运行模块,就可以替代 event。
计时器通过布尔值来激活 (actived
),激活后不再受激活信号影响,在设定的延迟时间内保持 true
的布尔值,时间结束后转为 false
.
过程如上图所示,在某一时刻获得一个 true
的布尔值之后,保持我们的信号一段时间。过程中不再受冲击信号影响,防止负反馈造成的左右横跳。结束后输出一个 end
信号。节点如下
ShaderJoy 的注释
timedelay
:计时器内部使用的延时delta
:计时器每次的流逝时间impact
:和delay
配合初始化timedelay
delay
:用于初始化计时器的延时
这算是一个基础版的计时器,如需输入特定参数保持住,可以按下图添加部分节点
新增输入的参数在信号激活(actived
)后保持数值不变,计时器未激活时输入等于输出。