我导出了一个我做过的测试,发现游戏画面全是品红色的。经过反复试验,我意识到这是因为新的通用渲染管线,而我在网上找到的信息都是关于即将被弃用的旧渲染系统的。

我当时正在处理两个对象:一个是带有网格过滤器和渲染纹理的游戏对象,它可以渲染精灵而无需让每个精灵都成为独立的游戏对象;另一个是带有网格过滤器的游戏对象,作为背景图像(可以是单张图片、平铺/重复的图片、纯色等)。

我想先说明的是,我的整个项目几乎都是用代码完成的,很少在编辑器中进行操作,而且我希望保持这种方式。所有内容在编辑器中测试时都能正常工作,但我在构建后发现品红色问题,查看日志后才知道是因为我使用了以下着色器:

代码
new Material(Shader.Find("Unlit/Transparent")

我本应该使用这个着色器:

代码
new Material(Shader.Find("Universal Render Pipeline/Unlit")

但我找不到任何方法让它像"Unlit/Transparent"那样工作。它需要更多的代码来使用,这种体验很不愉快。

对于使用新的着色器,似乎还需要额外的设置。我发现从着色器创建材质后,还需要进行以下操作:

代码
SetFloat("_Surface", 1.0f)
SetFloat("_Blend", 0.0f)
SetFloat("_ZWrite", 0.0f)
renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent

但我甚至不确定这是否有效。这是我能从谷歌找到的最好结果,而且即便是这些信息也已经过时了。

我用来绘制的游戏对象可以工作,尽管没有透明度。而用来作为背景图像的游戏对象却不再工作;我通过在编辑器中检查球体,发现它全是黑色,并尝试改变它的Z位置、层级结构以及其他设置来确认这一点,但都没有成功。

我并不喜欢通用渲染管线,我正在考虑新建一个使用已弃用的内置渲染管线的项目,然后把所有代码迁移过去。