【问题标题】:Unity: Custom shader not obeying alpha (transparency)Unity:自定义着色器不服从 alpha(透明度)
【发布时间】:2020-05-04 20:39:45
【问题描述】:

这是Unity中的自定义着色器,它是一个3色渐变着色器:

// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'

Shader "CustomShaders/ThreeColorsGradientShader" {
     Properties {
         [PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
         _ColorTop ("Top Color", Color) = (1,1,1,1)
         _ColorMid ("Mid Color", Color) = (1,1,1,1)
         _ColorBot ("Bot Color", Color) = (1,1,1,1)
         _Middle ("Middle", Range(0.001, 0.999)) = 1

     }

     SubShader {
         Tags {"Queue"="Transparent"  "IgnoreProjector"="True"  "RenderType"="Transparent"}
         LOD 200

         ZWrite Off

         Pass {
         CGPROGRAM
         #pragma vertex vert  
         #pragma fragment frag
         #include "UnityCG.cginc"

         fixed4 _ColorTop;
         fixed4 _ColorMid;
         fixed4 _ColorBot;
         float  _Middle;

         struct v2f {
             float4 pos : SV_POSITION;
             float4 texcoord : TEXCOORD0;
         };

         v2f vert (appdata_full v) {
             v2f o;
             o.pos = UnityObjectToClipPos (v.vertex);
             o.texcoord = v.texcoord;
             return o;
         }

         fixed4 frag (v2f i) : COLOR {
             fixed4 c = lerp(_ColorBot, _ColorMid, i.texcoord.y / _Middle) * step(i.texcoord.y, _Middle);
             c += lerp(_ColorMid, _ColorTop, (i.texcoord.y - _Middle) / (1 - _Middle)) * (1 - step(i.texcoord.y, _Middle));
             //c.a = 1;
             return c;
         }
         ENDCG
         }
     }
 }

将其分配给材质并在 UIButton 上使用材质后,它按预期工作,但如果我想更改材质的颜色 alpha(即使其透明),它不会响应这些更改。

代码中缺少什么?

【问题讨论】:

    标签: c# unity3d shader


    【解决方案1】:

    编辑测试副本此简介删除 ZWrite Off:

    SubShader
    {
         Tags {"Queue" = "Transparent" "RenderType" = "Transparent"}
         LOD 100
         Blend SrcAlpha OneMinusSrcAlpha
    
        Pass
        {
    

    编辑以应用于 ui 按钮,取消选中按钮组件中的图像,删除精灵,将颜色的 alpha 设置为 0。将平面作为子对象添加到按钮对象,将平面调整为所需的大小,应用着色器到飞机上。

    【讨论】:

    • 在片段着色器中返回 c 之前,您是否尝试设置 c.a = 0.5?
    • 能不能写代码啊,不知道在哪加,shader好复杂啊。
    • 不起作用,我将其应用于 uibutton 而不是游戏对象
    • 您无法更改 UI 对象上的材质,但我确实发布了一个解决方法,如果您需要 rect 以外的其他内容,您可以将 alpha 贴图添加到着色器并剔除成您想要的形状喜欢
    猜你喜欢
    • 2013-02-23
    • 1970-01-01
    • 1970-01-01
    • 2013-10-19
    • 2014-02-06
    • 2015-09-11
    • 1970-01-01
    • 2015-02-16
    • 1970-01-01
    相关资源
    最近更新 更多