一些着色器需要同时支持多个渲染管线。将资源包要求添加到子着色器和通道,可以避免当着色器代码使用未安装的资源包中的 include 文件或需要特定版本的资源包进行编译时出现编译错误。
版本限制定义了一组版本范围。如果所需资源包的安装版本不在任何范围内,则不满足资源包要求。同样地,如果某项要求指定了一组 Unity 版本限制,则此规则同样适用于 Unity 的当前版本。有关版本限制的语法的信息,请参阅版本语法。
如果子着色器或通道声明了项目不满足的资源包要求,Unity 会将该子着色器或通道从后续的处理和编译中排除。如果项目不包含所需的资源包,或包含了这些资源包但没有兼容版本,就会发生这种情况。如果着色器不包含符合要求的单个子着色器,或者如果没有任何子着色器包含了符合要求的通道,则控制台 (Console) 窗口将显示警告消息。
注意:PackageRequirements 代码块必须位于子着色器或通道中的所有其他声明之前。
以下代码示例展示了如何在子着色器和通道中指定资源包要求。子着色器为名为“com.my.package”的资源包声明了单个资源包要求,并适用于从 2.2.0 开始的任何资源包版本。此着色器有两个通道:
第一个通道需要:
版本介于 10.2.1 和 11.0 之间的通用渲染管线包。
3.2 或更高版本的 Text Mesh Pro 包。
第二个通道需要:
版本介于 8.0 到 8.5 之间的高清渲染管线包
Shader "Examples/ExampleShader"
{
SubShader
{
PackageRequirements
{
"com.my.package": "2.2"
}
Pass
{
PackageRequirements
{
"com.unity.render-pipelines.universal": "[10.2.1,11.0]"
"com.unity.textmeshpro": "3.2"
}
// The rest of the code for the Pass
}
Pass
{
PackageRequirements
{
"com.unity.render-pipelines.high-definition": "[8.0,8.5]"
}
// The rest of the code for the Pass
}
}
}