Version: Unity 6.0 (6000.0)
语言 : 中文
着色器标签简介
将着色器设置为需要着色器模型或 GPU 功能

将着色器设置为需要资源包

一些着色器需要同时支持多个渲染管线。将资源包要求添加到子着色器通道,可以避免当着色器代码使用未安装的资源包中的 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

        }
    }
}

其他资源

着色器标签简介
将着色器设置为需要着色器模型或 GPU 功能