在 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)以在这些值之间平滑过渡。
由于我无法在着色器中存储任何可以在每次执行时增加的值,实现该效果的最佳方法是什么? (或者是用略微增加的值一次又一次地执行上面几行的唯一方法?)
最佳答案
The SKShader
documentation说你的着色器收到这个制服:
float u_time; | Uniform | The elapsed time in the simulation.
所以用它来驱动动画。
耗时被传递给 SKScene
的 update
方法。在名为 u_transitionStartTime
的制服中将其传递给着色器。然后,您可以使用 u_time
和 u_transitionStartTime
计算转换进度(如果需要,还可以使用另一个统一的转换结束时间或转换持续时间)。
关于ios - 增加 SKShader 中的统一值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53165137/