EDIT: already有解决方案了。 "ZWrite=off" & "Queue=Transparent" 在水波纹shader中已经正确配置了,所以问题在于别的地方。显然,水波纹shader使用"_CameraSortingLayerTexture"来样本背后的物体。所以我在 "Renderer 2D Data" 资产中,进入 "Camera Sorting Layer Texture" 子菜单,设置 "Foremost Sorting Layer" 为我sprite的实际排序层。


为了创建涟漪水,我正在使用一个第三方组件,该组件通过操纵MeshRenderer数据来使水波反应于碰撞器。无论如何,这意味着水中的所有物体都必须使用MeshRenderer而不是SpriteRenderer

其他物体使用SpriteRenderers。当他们的Sorting Layer不为 "Default" 时,就出现问题:水后面的每个像素都消失。

被涟漪遮住的sprite部分

首先,我需要设置图像背后,但是看起来没有明显的方法来显式地设置两种类型渲染器之间的顺序。有人提到,这与每种类型渲染器优先顺序的方式有关,可以通过在水上添加一个Sorting Group并在这个组中选择一个排序层 sprites 前面来解决。但是,这会产生上面结果,而这在水面透明时是有效的。

然后尝试了将sprite的排序层设置为 "Default",果然“正常”:

盒子的排序层设置为 "\\"Default\\"

尽管这可能与排序层内部的工作方式有关。

tl;dr:我想让水波纹shader即使后面的sprite 不在 “Default” 排序层时也能正常工作。