在SpriteKit节点上,我运行片段着色器(SKShader)来显示动画(canvasNode.fillShader = shader
)。
在某个时候,我想增加一个统一参数(transitionProgress
,介于0和1之间),以更改动画阶段。
当前,我将其设置为0到1。
shader.uniforms = [
SKUniform(name: "u_transitionProgress", float: 1)
]
但是,我宁愿进行过渡(例如线性增加0、0.001、0.002,...,0.999、1),以在这些值之间进行平滑过渡。
由于我无法在着色器中存储任何可以在每次执行时增加的值,因此达到这种效果的最佳方法是什么? (或者是用略微增加的值一次又一次地执行上面几行的唯一方法吗?)
答案 0 :(得分:2)
The SKShader
documentation说您的着色器收到此制服:
浮动u_time; |制服模拟中的经过时间。
所以用它来驱动动画。
经过的时间将传递给SKScene
的{{1}}方法。以统一的update
将其传递给着色器。然后,您可以使用u_transitionStartTime
和u_time
(如果需要,还可以使用另一个统一的过渡结束时间或过渡持续时间)来计算过渡进度。