【求助】pass 每帧设置模型UV的问题

想每帧设置模型的UV,不知道哪里出了问题,代码如下:

    this.lineBoneNode.getPosition(TMP_VEC3);
    TMP_VEC3.x += dt;
    this.lineBoneNode.setPosition(TMP_VEC3);

    let pass = this._lineMaterial.passes[0];
    let handle = pass.getHandle('tilingOffset');
    let scale = TMP_VEC3.x / 0.5;
    pass.setUniform(handle, new Vec4(1, scale, 0, 0));

此段代码在update里每帧调用,不起作用。

就算是用setProperty也无效,只在onload的时候设置起作用
this._lineMaterial.setProperty('tilingOffset', new Vec4(1, scale, 0, 0));

找到了BUG出现的原因了。
代码本身没问题,模型在3D场景里可以生效;
将3D模型通过挂载UIMeshRenderer组件,当作UI是用就不起作用了!

引擎组能给个解决方法不

你这个是啥版本,我用 3.4.2 测试是可以的

我也是3.4.2,你有加UIMeshRenderer组件吗?我的3D模型是放UI层展示的。在3D场景里是可以的,UI上就不行

有的,直接放到 ui 上看效果

https://github.com/dyowoo/cocos-test-uv.git
这个是我的测试工程,放UI上就是没有效果。

scene3D是3D场景,scene2D是放UI上,代码用的同一个代码

材质获取这里应该用 .material 获取材质实例而不应该用 getMaterial 获取共享材质,共享材质一旦修改所有用到这个材质的地方都会同步修改,通常一个材质要动态修改的时候,最好先实例(.material)后再使用,实例后的材质不会受共享材质修改影响,2d 底层数据比较特殊,取的都是实例材质

感谢放空!

该主题在最后一个回复创建后14天后自动关闭。不再允许新的回复。