Overrid Material就是在原本材质的基础上在覆盖一个新的,如果覆盖了这个材质就会绘制2次。如下图所示一般会添加一个层,在Filtering中不包含Actor层,这样渲染时就会过滤它。
如下图所示,添加一个新的渲染器,设置LayerMask为Actor层,下面在设置一个可覆盖的material材质,这样Actor层中所有的材质都会使用Overrid的这个材质进行渲染。
此时已经出了个大问题,立方体原本设置的材质贴图、颜色、等其他参数都变成统一的了,所以需要添加脚本动态将原本的参数赋值给新的OverridMaterial才行。

如下代码所示,通过MaterialPropertyBlock的方式将参数传递给新材质中,只要确保传递的这些参数在新材质Shader中的CBUFFER中极即可。
public class NewBehaviourScript : MonoBehaviour
{
public Color color = Color.white;
public Texture2D texture;
void Awake()
{
Renderer renderer = GetComponent<Renderer>();
MaterialPropertyBlock block = new MaterialPropertyBlock();
renderer.GetPropertyBlock(block);
block.SetTexture("_BaseMap", texture);
block.SetColor("_BaseColor", color);
renderer.SetPropertyBlock(block);
}
}
TEXTURE2D(_BaseMap); SAMPLER(sampler_BaseMap);
CBUFFER_START(UnityPerMaterial)
float4 _BaseMap_ST;
float4 _BaseColor;
CBUFFER_END
如下图所示,多个Actor层下的物体以不同的参数进行绘制OverridMaterial。
- 本文固定链接: https://www.xuanyusong.com/archives/4965
- 转载请注明: 雨松MOMO于 雨松MOMO程序研究院 发表
捐 赠写博客不易,如果您想请我喝一杯星巴克的话?就进来看吧!


