使用自定义材质(material),能否向effect中传入长度不定的数组?

问题的背景是:我做的游戏中有一些打击特效,由于出现频率很高,并且除了展示在画面上之外并没有任何其他逻辑,如果都个打击特效都生成一个node挂载在场景上的话,效果多的时候就会很卡。因此想要尝试用shader来解决这个问题。
所以我想自己写一个material,挂在游戏的背景图上。游戏运行时业务代码计算好有哪些特效要展示、出现的位置和大小等,传给material和effect。
然后在写effect的时候遇到了问题,不知道怎么向effect中传递不定长度的数组。


如上图所示,我在fs片段中定义一个float 数组array,然后在effect声明中定义array: {value:[]}, 这时编译器报错数组长度无效。

请问这里的声明该怎么写?还是说根本无法向effect传入不定长度的数组,无法实现该需求?

谢谢各位大佬~

顶一下,看看

不知道你用的creator版本是哪个,3.0.0实现了代码传数组给shader,之前的版本都不能传数组。
我试验着3.0.0只能uniform进来vec4的数组,并且必须定一个长度,哪怕你定100的长度,在shader里对该数组元素有值就用,规定z为1时就是数组赋值长度结束时,这时你就有了长度在100以内的“不定”长度数组了。另外,CCEffect %的properties下可以不定义该数组,只用代码传入。

1赞

好的,感谢!