シェーダーによっては、複数のレンダーパイプラインを同時にサポートする必要があります。SubShader (サブシェーダー) と Pass (パス) にパッケージ要件を追加すると、シェーダーコードがインストールされていないパッケージのインクルードファイルを使用したり、コンパイルに特定のバージョンのパッケージを必要とする場合に、コンパイルエラーを回避することができるようになります。
バージョン制限では、一連のバージョン範囲を定義します。必要なパッケージのインストール済みバージョンが、この範囲のいずれにも含まれていない場合、そのパッケージの要件は満たされていません。同様に、要件で Unity のバージョン制限のセットが指定されている場合は、Unity の現在のバージョンに適用されます。バージョン制限の構文については、バージョン構文 を参照してください。
サブシェーダーやパスが、プロジェクトが満たさないパッケージ要件を宣言している場合、Unity はそのサブシェーダーやパスを以降の処理およびコンパイルから除外します。これは、プロジェクトに必要なパッケージが含まれていないか、含まれていても互換性のあるバージョンでない場合に起こります。シェーダーに要件を満たすサブシェーダーが 1 つもない場合、またはサブシェーダーに要件を満たすパスが 1 つもない場合、コンソールウィンドウに警告メッセージが表示されます。
注意PackageRequirements ブロックは、サブシェーダーまたはパス内の他のすべての宣言の前に来る必要があります。
以下のコード例は、サブシェーダーとパスの両方でパッケージ要件を指定する方法を示しています。サブシェーダーは、“com.my.package” というパッケージに対する単一のパッケージ要件を宣言しており、このパッケージの 2.2.0 以降のすべてのバージョンで動作します。サブシェーダーは、2 つのパスを持ちます。
最初の Pass は以下を必要とします。
バージョン 10.2.1 から 11.0 までの Universal Render Pipeline パッケージ。
バージョン 3.2 以上の Text Mesh Pro パッケージ。
2 つ目の Pass は以下を必要とします。
バージョン 8.0 から 8.5 までの High-Definition Render Pipeline パッケージ。
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
}
}
}