631 字
3 分钟
一个 Rider 开发 Shader 小技巧

一个 Rider 开发 Shader 小技巧#

引言#

最近在学习和开发 Unity Shader 的时候,发现自己总是在重复做同一件事:

写一个新的 Shader,先敲一堆 Tags。

Tags
{
"RenderPipeline" = "UniversalPipeline"
"RenderType" = "Opaque"
"Queue" = "Geometry"
}

虽然内容不多,但总会遇到几个问题:

  • 单词拼错
  • 大小写写错
  • Queue 名字记不住
  • RenderType 经常忘有哪些可选项
  • 每次都要去翻之前的 Shader

尤其是刚开始学习 URP 的时候,经常写完才发现 Shader 根本没有进入对应渲染队列,最后排查半天才发现是 Tags 写错了。

使用实时模板#

后来发现 Rider 的 Live Template(实时模板) 特别适合解决这个问题。

我的做法很简单:

把经常使用的 Tags 项做成模板,例如:

tagRP = "RenderPipeline" = "UniversalPipeline"
tagRT = "RenderType" = "Opaque"
tagQ = "Queue" = "Geometry"

这样做最大的好处并不是节省了几秒敲代码的事件,而是避免了最难排查的单词拼写错误,以及忘记有哪些可选项。直接避免了这些低级错误。

如何自定义自己的实时模板#

  1. 设置 -> 编辑器 -> 实时模板 -> 其他语言

  2. 新建一个模板组,我这里起名叫做 Unity Shader

  3. 选中新建的模板组,新建实时模板

  4. 实时模板的配置:以 Tags 为例

    • 缩写:tagLM (按个人习惯来,能让自己一眼了解含义即可)
    • 描述:这里随便写,描述清晰即可
    • 模板文字:LightMode" = "$LIGHT_MODE$" 其中美元符号包含的为变量,可按需替换
    • 适用于:这部分是让我们填写这个模板适用哪种语言,这里选择 other
  5. 接下来是编辑模板文字,点击 “编辑变量” 进入子页面

    • 名称:这部分填写模板文字中美元符号包含的内容 LIGHT_MODE

    • 表达式:LightMode 中有非常多的模式可以选择,这里我们使用 enum 表达式

      enum("UniversalForward", "UniversalForwardOnly", "UniversalGBuffer", "ShadowCaster", "DepthOnly", "DepthNormals", "Meta", "Universal2D", "SRPDefaultUnlit")
  6. 这里推荐勾选定义则跳过,这样定义过的就不再重复显示。

  7. 点击保存即可,随便打开一个 shader 文件,输入 “tagLM” 即可触发实时模板。

总结#

虽然只是 Rider 的一个小功能,但在长期开发过程中确实能省下不少时间。

如果你经常写 Unity Shader,我还是比较推荐花十分钟配置一下自己的 Live Template 库,收益会比想象中高很多。