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"这样做最大的好处并不是节省了几秒敲代码的事件,而是避免了最难排查的单词拼写错误,以及忘记有哪些可选项。直接避免了这些低级错误。
如何自定义自己的实时模板
-
设置 -> 编辑器 -> 实时模板 -> 其他语言
-
新建一个模板组,我这里起名叫做 Unity Shader
-
选中新建的模板组,新建实时模板
-
实时模板的配置:以 Tags 为例
- 缩写:tagLM (按个人习惯来,能让自己一眼了解含义即可)
- 描述:这里随便写,描述清晰即可
- 模板文字:
LightMode" = "$LIGHT_MODE$"其中美元符号包含的为变量,可按需替换 - 适用于:这部分是让我们填写这个模板适用哪种语言,这里选择 other
-
接下来是编辑模板文字,点击 “编辑变量” 进入子页面
-
名称:这部分填写模板文字中美元符号包含的内容
LIGHT_MODE -
表达式:
LightMode中有非常多的模式可以选择,这里我们使用 enum 表达式enum("UniversalForward", "UniversalForwardOnly", "UniversalGBuffer", "ShadowCaster", "DepthOnly", "DepthNormals", "Meta", "Universal2D", "SRPDefaultUnlit")
-
-
这里推荐勾选定义则跳过,这样定义过的就不再重复显示。
-
点击保存即可,随便打开一个 shader 文件,输入 “tagLM” 即可触发实时模板。
总结
虽然只是 Rider 的一个小功能,但在长期开发过程中确实能省下不少时间。
如果你经常写 Unity Shader,我还是比较推荐花十分钟配置一下自己的 Live Template 库,收益会比想象中高很多。