.hlsl および .cginc ファイルのコード解析コンテキストを切り替える
.hlsl シェーダーファイルでは、プリプロセッサーシンボルと #if ステートメントを使用して、メソッドやデータ構造の定義、利用可能性、実装を変更することで、コンパイル時に動作を変更できます。 これらのファイルのいずれかを解析する場合、Rider はデフォルトで、デフォルト定義シンボルの自動コンテキストを使用します。 これにより、 .hlsl ファイルのセクションが 構文ハイライトなしで非アクティブとしてマークされる可能性があります (コード補完、 インスペクションなど)。
.hlsl ファイルが複数の .shader ファイルから、または .shader ファイル内の複数の CGPROGRAM ブロックからインクルードされている場合、Rider はインクルードポイントで定義されたコンテキストを使用して .hlsl ファイルを解析できます。 コンテキストは、ステータスバーの Unity シェーダーコンテキストピッカーを使用して切り替えることができます。

例: FOO シンボルが定義されているか否かによって異なるメソッドを定義するファイル example.hlsl があるとします。 自動コンテキストでは、Rider はデフォルトで FOO が未定義であるとみなし、この #if ステートメントの最初のブランチを非アクティブとしてマークします。 bar 関数はこのコンテキストで定義されており、 foo 関数を使用しようとすると、未解決のシンボルエラーが発生します。
また、複数のシェーダープログラムを定義し、各 CGPROGRAM ブロックから複数回 example.hlsl をインクルードする Foo.shader ファイルもあるとします。 各シェーダープログラムには独自のコンテキストがあります。 最初のものは 14 行目から始まり、 FOO というシンボルを定義してから example.hlsl をインクルードします。一方、2 番目のプログラムは 22 行目から始まり、 BAR を定義し、その後 HLSL ファイルをインクルードします。
example.hlsl を編集する際、コンテキストピッカーをクリックしてポップアップからシェーダープログラムの場所を選択することで、コンテキストを切り替えることができます。 Rider は自動コンテキストを表示しますが、 example.hlsl を含む場所も一覧表示します。 Foo.shader:14 を選択すると、Rider は Foo.shader の 14 行目にある CGPROGRAM シェーダーのコンテキストを使用して example.hlsl ファイルを解析します。 つまり、 FOO シンボルが定義され、上記の #if ステートメントの最初のブランチがアクティブになり、 foo 関数が定義されます。
