首页 > 解决方案 > 如何在我的 unity3d 着色器中添加透明度?

问题描述

我有一个用于将隧道弯曲成弯曲路径的着色器。但是当我在那个隧道内时,我希望隧道的墙壁是透明的(透明的),这样我就可以看到隧道外的天空盒和其他东西。

我的宇宙飞船在这条隧道内旅行。

我的着色器中已经编码了透明度设置,但这不起作用。这是我的代码。请看一下,

Shader "WorldBend/Bend_Unlit_Segments" 
{

Properties
{
    _Color ("Main Color", Color) = (1,1,1,1)
    _Emission ("Emissive Color", Color) = (0,0,0,0)
    _MainTex ("Base (RGB)", 2D) = "white" { }
    _Transparency ("Transparency", Float) = 0.25
}

SubShader 
{
    Tags {"Queue"="Transparent" "RenderType"="Transparent" }
    LOD 100

    ZWrite Off
    Blend SrcAlpha OneMinusSrcAlpha

    Pass {  
        Name "BASE"
        CGPROGRAM
            #pragma vertex vert
            #pragma fragment frag

            #include "UnityCG.cginc"
            #include "BendEffect.cginc"

            struct appdata_t {
                float4 vertex : POSITION;
                float2 texcoord : TEXCOORD0;
            };

            struct v2f {
                float4 vertex : SV_POSITION;
                half2 texcoord : TEXCOORD0;
            };

            sampler2D _MainTex;
            float4 _MainTex_ST;
            float4 _Emission;
            float4 _Color;
            float4 _Transparency;

            v2f vert (appdata_t v)
            {
                v2f o;
                o.vertex = UnityObjectToClipPos(BendEffect(v.vertex));
                o.texcoord = TRANSFORM_TEX(v.texcoord, _MainTex);
                return o;
            }

            fixed4 frag (v2f i) : COLOR
            {
                fixed4 col = tex2D(_MainTex, i.texcoord) * _Color;
                col.a = _Transparency;
                return col + _Emission;
            }
        ENDCG
    }
}

}

标签: unity3dshadertransparentalphaalpha-transparency

解决方案


_Color ("Main Color", Color) = (1,1,1,1)

这里的颜色值是 RGBA 格式,第四个值(“A”)是设置透明度的 alpha 通道。1 表示不透明,0 表示透明。介于两者之间的值就像其他 RGB 值一样。


推荐阅读