前言
在上一篇文章中介绍了一种实现遮挡半透明效果的方法,但是在 Unity 2022 Lts 版本中,透明时存在阴影缺失问题,本文将介绍如何解决这个问题。
效果预览
解决方案
1. 复制一份 SimpleLit 到项目中
从(Packages » Universal RP » Shaders)中复制一份 SimpleLit 到项目目录中,并打开它。
2. 修改 SimpleLit
在 SimpleLit 中,添加以下代码到 Properties 中:
[ToggleUI] _CastShadows("Cast Shadows", Float) = 1.0
并修改 Shader 的名称,避免重名。
3. 修改上篇文章中创建的 shader
在上篇文章中创建的 shader 中,添加以下代码到 Properties 中:
[MainTexture] _BaseMap("Base Map (RGB) Smoothness / Alpha (A)", 2D) = "white" {}
[MainColor] _BaseColor("Base Color", Color) = (1, 1, 1, 1)
_Cull("__cull", Float) = 2.0
并修改最底部的 FallBack 为我们刚刚重命名的 SimpleLit
原理解析
在 Unity BaseSahderGUI. Cs 中,有一段代码:
如果找不到_CastShadows 属性,它将根据表面类型(不透明或透明)启用/禁用 shadowCaster 通道!
因此,我们通过在 SimpleLit 中添加_CastShadows 属性,并将其默认值设置为 1.0,就可以解决这个问题。