spine shader设置uniform变量无效问题

不要沉不要沉

因为 spine 的 material 有缓存,不推荐这样处理

    const color = spine.color.clone();
    color.a = this.time * 255;
    spine.color = color;

如果要设置透明度直接设置 spine 的 color

我现在要实现一个动态的spine动画遮罩,类似骨骼蒙板,功能实现了发现蒙版不会动,最后定位到uniform变量传递无效,可以手动清理material缓存吗

有清除的函数,但是是未开放的 api,未来可能会删除或者改名

// @ts-ignore
spine._cleanMaterialCache();
spine.customMaterial.setProperty("cusOpacity",this.time);

也会反馈相关问题给负责 spine 的相关人员,后续完善 spine 时考虑进去

还有一个问题,为啥 spine 动画要用 spine.customMaterial去操作,而sprite直接可以用 sprite.material去操作,能统一吗

具体看你是否有用到 customMaterial,spine 是优先获取 customMaterial,我看你给的 demo 是有 customMaterial 的才这样操作,如果要统一那就把 customMaterial 去掉

但是 material 是没有在属性面板的,所有需要用代码设置

image 我在脖子这里做了一个蒙版,但是一个场景有多个动画的时候不知道为啥失效了

sprite有customMaterial的时候也可以通过material操作的

这种方式可以

多个动画失效了,这个帮忙看看

image 哦有一个生效了,感觉像是材质共享了

cache mode用了 shared cache ?

没有,使用的是realtime

有解决办法吗 @Knox

麻烦提供下能复现的demo, 我们在进一步跟进看看

https://github.com/fangyuan123456/spineTest.git,spine文件有20m,麻烦自己下载一下

你好参考这个PR的修改,合并
请把demo中对customMaterial改成 customMaterialInstance; _cleanMaterialCache这个内部接口不要调用

版本3.8.6,遇到同样问题.使用这个修改后,web无问题,JSB不生效.

已创建 issue 跟进,后续有问题,请在这个issue反馈