无法修改材质alpha值且Shader出现报错,该如何解决?
无法修改材质Alpha值的解决方案
核心原因
- 你使用的自定义MultipleUVBlend01 Shader未配置透明渲染相关参数,默认运行在不透明渲染队列,且未开启Alpha混合,修改Alpha值不会生效还会触发属性匹配报错
- 若Shader未声明
_Color主色属性,直接调用material.color赋值时会因找不到对应属性触发报错
解决方案
方案一:修改Shader配置(永久生效,推荐)
步骤1:打开MultipleUVBlend01 Shader文件,在Properties块添加主色属性声明
Properties { _Color ("Tint Color", Color) = (1,1,1,1) // 原有其他属性保持不变 }
步骤2:修改SubShader的Tags配置,调整为透明渲染类型
Tags { "Queue" = "Transparent" "RenderType" = "Transparent" // 原有其他Tag保持不变 }
步骤3:在Pass块添加透明混合配置
Pass { Blend SrcAlpha OneMinusSrcAlpha ZWrite Off // 原有Pass内其他配置保持不变 }
步骤4:修改片元着色器逻辑,将主色Alpha值应用到最终输出
fixed4 frag(v2f i) : SV_Target { // 原有颜色计算逻辑保持不变 fixed4 outputCol = /* 原有逻辑计算得到的最终颜色 */; outputCol.rgb *= _Color.rgb; outputCol.a *= _Color.a; return outputCol; }
方案二:代码动态修改材质参数(快速测试用)
无需修改Shader,直接替换原有修改Alpha的代码即可:
Renderer targetRender = other.gameObject.GetComponent<Renderer>(); Material targetMat = targetRender.material; // 配置透明混合参数 targetMat.SetInt("_SrcBlend", (int)UnityEngine.Rendering.BlendMode.SrcAlpha); targetMat.SetInt("_DstBlend", (int)UnityEngine.Rendering.BlendMode.OneMinusSrcAlpha); targetMat.SetInt("_ZWrite", 0); // 调整渲染队列 targetMat.renderQueue = (int)UnityEngine.Rendering.RenderQueue.Transparent; // 修改Alpha值 Color currentColor = targetMat.color; currentColor.a = 0.5f; targetMat.color = currentColor;
注意:该方案仅适用于兼容标准管线属性规则的自定义Shader,若调整后显示异常请切换到方案一
内容的提问来源于stack exchange,提问作者erenjeager
相关产品推荐
相关产品推荐

