在unity项目中切换为URP之后,可能大部分材质都会变成粉色(错误状态),这时候我们可以点击Edit-Render Pipeline-Universal Render Pipeline下的选项来进行自动转换为支持URP的材质,但是有的时候会出现
“xxx material was not upgraded. There’s no upgrader to convert xxxx shader to selected pipeline UnityEditor.Rendering.Universal.UniversalRenderPipelineMaterialUpgrader:UpgradeSelectedMaterials() (at
Library/PackageCache/com.unity.render-pipelines.universal@7.3.1/Editor/UniversalRenderPipelineMaterialUpgrader.cs:37
)”
这是因为现在unity还不支持将一些自定义的shader文件一键转换为支持URP的shader文件,具体情况可以通过代码来了解。
在我们点击自动转换的选项之后,会在UniversalRenderPipelineMaterialUpgrader脚本中执行UpgradeSelectedMaterials函数:
在UpgradeSelectedMaterials函数中调用了脚本中的GetUpgraders函数:
重点就在这个函数,可以看到这个函数只把unity原本一些自带的shader添加进了upgraders变量中
,所以在我们之后会调用UpgradeSelection,然后调用Upgrade函数,之后在Upgrade内部执行GetUpgrader函数时会进行一层判断
如果在upgraders变量中都找不到与要转换shader对应的名字,那么会返回null,就会出现文章开头的提示。
所以说目前unity还是只可以自动转换其自己的标准着色器。还是建议手动进行转换。