JetBrains Rider 2026.1 Help

Unity。 シェーダーキーワードを有効化する

シェーダーファイルを扱う場合、多くの場合、 #if プリプロセッサーディレクティブを使用してさまざまな シェーダーバリアント(英語)を生成する必要があります。 これらのブランチを使用すると、モバイルやデスクトップなどの異なるプラットフォーム、Vulkan や DirectX などの異なるグラフィックス API、さらには シェーダーキーワード(英語)で実行時に有効化される異なるユーザー機能などに対して、条件付きの動作を導入できます。

Rider は入力中にシェーダーソースコードを解析します。 セマンティックモデルを作成し、それを利用して構文ハイライト、 Ctrl+クリック ナビゲーション、使用箇所の検索、スマートリネームやその他のリファクタリングなどの豊富な機能を提供できます。 ただし、Rider がすべてのプリプロセッサディレクティブの内容について同時にセマンティックモデルをビルドするのは現実的ではありません。非アクティブなブランチには、既存のフィールドや関数の矛盾する別の宣言、壊れたコード、あるいは関数を閉じて新しい関数を宣言するための予期しない構文(例:閉じ中括弧と新しい関数宣言を含む)が含まれる可能性があります。 そのため、Rider は編集中に定義されているシンボルに基づいてプリプロセッサブランチのみを解析します。 その結果、「非アクティブ」なグレーアウトされたプリプロセッサブランチが生じ、構文ハイライトやインスペクションが行われません。

グレーアウトされた非アクティブなコードを含むプリプロセッサーブランチの例

Rider では、どのシェーダーキーワードを有効にするか、またどの Unity シェーダープリプロセッサーシンボルを定義するかを選択できます。

58b56341 31d0 4679 9028 164ff6f5f650

エディター下部のパンくずリストにある バリアント ウィジェットをクリックすると、編集中に異なるシンボルを定義されたものとして扱うよう Rider に指示するポップアップが表示されます。 例えば、グラフィックス API を選択できます。 DirectX 11 を選択すると、Rider は SHADER_API_D3D11 シンボルが定義されているものとして扱い、 #if SHADER_API_D3D11 内のものはアクティブなコードとして解析され、構文ハイライトやインスペクションなどが適用されます。 バルカン に切り替えると、 SHADER_API_D3D11 はアクティブでなくなり、プリプロセッサブランチは非アクティブとして扱われますが、 #if SHADER_API_VULKAN 内のものがアクティブになります。

DirectX プラットフォームを選択すると、SHADER_API_D3D11 シンボルが有効になります。

同様に、Rider はデスクトップとモバイルを切り替えて、 SHADER_API_DESKTOP または SHADER_API_MOBILE のシンボルをアクティブ化できます。

Rider は、既知の SHADER_ シンボルの補完機能を提供することに注意してください。

SHADER 定義シンボルの補完

Rider では、シェーダーキーワードを有効にすることもできます。 以下の #pragma ディレクティブは、 BLUEREDGREEN シェーダーキーワードを宣言します。 これらのキーワードは、 Shader.EnableKeyword API などを使用して実行時に有効にできます(詳細については、 シェーダーキーワード(英語)のドキュメントを参照してください)。

#pragma shader_feature _ BLUE RED GREEN

これらのキーワードはプリプロセッサー定義シンボルでもあり、Rider はシェーダーバリアントウィジェットを通じてこれらを有効にすることができ、その後、適切なプリプロセッサーブランチが処理されます。 キーワードが有効になると、太字と下線でハイライトされます。

有効なキーワードのプリプロセッサーブランチがアクティブとして表示されます

#pragma 内のキーワードもハイライトされます。 また、 #pragma 内、シンボルが使用されている場所であればどこでも、 Alt+Enter のコンテキストメニューからキーワードを有効または無効にすることも可能です。

enabled キーワードを含むプラグマディレクティブは、太字と下線でハイライトされています。

注意点: Unity では複数のキーワードを有効にできますが、プラグマディレクティブ内の最初のキーワードのみがアクティブとみなされます。 その他のキーワードはすべて抑制され、アクティブになりません。 Rider では抑制されたキーワードに取り消し線が引かれ、シンボルは定義されません。 Rider では、コード内で複数の競合するキーワードを有効にしたり、同じキーワードを複数のプラグマで定義したりできるため、プラグマ内の他のキーワードは自動的に無効になりません。 抑制されたキーワードに対して Alt+Enter メニューを使用すると、そのキーワードが抑制される原因となっているキーワードを無効にできます。

Alt+Enter menu showing disabling of conflicting keywords

シェーダーバリアントウィジェットは、Rider のコード分析にコンテキストを提供する優れた方法であり、編集中のシェーダーバリアントを選択して、Rider の分析やその他の豊富な機能を活用できます。

2026 年 6 月 19 日