不同类的信息 启用着色器关键字
处理着色器文件时,通常需要使用 #if 预处理程序指令来生成不同的 着色器变体 这些分支可用于为不同平台(如移动端或桌面)、不同图形 API(如 Vulkan 或 DirectX),或甚至不同用户功能引入条件行为,可在运行时通过 着色器关键字 启用
Rider 会在输入时解析你的着色器源代码。 它会构建一个语义模型,并可用于提供丰富的功能,如语法高亮显示、 Ctrl+点击 导航、查找用法、智能重命名及其他重构功能。 然而,Rider 无法同时为所有预处理程序指令内容构建语义模型;非活动分支可能包含现有字段或函数的替代冲突声明、损坏的代码,甚至包含用于关闭某个函数并声明新函数的意外语法(例如包括一个闭合大括号及新函数声明) 因此,Rider 只会在编辑时根据当前定义的符号分析预处理程序分支 这样会导致“非活动”灰显的预处理程序分支,无语法高亮显示或检查
Rider 允许选择启用哪些着色器关键字,以及定义哪些 Unity 着色器预处理程序符号
点击编辑器底部路径导航栏中的 变体 微件,将显示一个弹窗,使 Rider 在编辑时将不同符号视为已定义 例如,可以选择图形 API——选择 DirectX 11 后,Rider 会将 SHADER_API_D3D11 符号视为已定义, #if SHADER_API_D3D11 内的内容将作为活动代码进行解析,并带有语法高亮显示和检查等 切换到 Vulkan 时, SHADER_API_D3D11 将不再活动,预处理程序分支也会被视为非活动, #if SHADER_API_VULKAN 内的内容则会变为活动
同样,Rider 可以在桌面与移动端之间切换以激活 SHADER_API_DESKTOP 或 SHADER_API_MOBILE 符号。
请注意,Rider 会对已知的 SHADER_ 符号提供补全。
Rider 还允许启用着色器关键字。 以下 #pragma 指令会声明 BLUE、 RED 以及 GREEN 着色器关键字。 这些关键字可在运行时通过 Shader.EnableKeyword API 等方式启用(详见 着色器关键字 文档)。
这些关键字也是预处理程序定义的符号,Rider 可通过着色器变体微件启用它们,并随后处理相应的预处理程序分支 启用关键字后,其会以粗体且带下划线高亮显示。
#pragma 中的关键字也会被高亮显示。 还可以通过 Alt+Enter 上下文菜单,在 #pragma 或符号其它使用位置启用或禁用关键字。
注意:Unity 允许启用多个关键字,但 pragma 指令中只有第一个关键字会被视为激活。 其余关键字将被抑制且不会激活。 Rider 会用删除线标记被抑制的关键字,并且该符号不会被定义。 Rider 不会自动在 pragma 指令中禁用其他关键字,因为代码中可能启用多个有冲突的关键字,且也可以在多个 pragma 中定义同一关键字。 可以在 Alt+Enter 菜单用于被抑制的关键字,以禁用导致其被抑制的关键字
着色器变体微件是为 Rider 代码分析提供上下文的好方式,可以选择正在编辑哪个着色器变体,并利用 Rider 的分析及其他丰富功能。