在程序运行过程中我们可能会有修改材质SurfaceType的需求,比如说我们想要实现一个遮挡半透效果,从摄像机发射一条射线到玩家,如果有场景物体在其中遮挡,我们就使其变得半透明。
///material为urp/lit材质
//修改surfacetype为透明
material.SetColor("_BaseColor",new Color(1f,1f,1f,0.2f));
material.SetFloat("_Surface",1.0f);
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha);
material.SetInt("_ZWrite", 0);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.EnableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = 3000;
//修改surfacetype为不透明
material.SetColor("_BaseColor",new Color(1f,1f,1f,1f));
material.SetFloat("_Surface",0.0f);
material.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.One);
material.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.Zero);
material.SetInt("_ZWrite", 1);
material.DisableKeyword("_ALPHATEST_ON");
material.DisableKeyword("_ALPHABLEND_ON");
material.DisableKeyword("_ALPHAPREMULTIPLY_ON");
material.renderQueue = -1;