Unity 2D - 停用 A 值的添加
Unity 2D - deactivate addition of A values
如何在 Unity 中禁用添加 A 值 (ARGB)?我有一个来自多个部分的 fugurine。当部分重叠时,会像图片一样添加不透明度。谢谢
我找到了 kida 做的着色器:
Shader "Custom/FlatTransparent" {
Properties {
_Color("Main Color", Color) = (1,1,1,1)
_MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
}
SubShader {
Tags{ "Queue" = "Transparent" "IgnoreProjector" = "False" "RenderType" = "Transparent" }
Pass {
ColorMask A
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
float4 vert(float4 vertex : POSITION) : SV_POSITION {
return UnityObjectToClipPos(vertex);
}
fixed4 frag() : SV_Target {
return _Color;
}
ENDCG
}
Pass {
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
fixed4 _Color;
struct appdata {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert(appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag(v2f i) : SV_Target{
fixed4 col = _Color * tex2D(_MainTex, i.uv);
return col;
}
ENDCG
}
}
Fallback "Diffuse"
}
要正常工作,需要满足三个条件:
- 使用此着色器
,精灵必须将其 Material 设置为 Material
- 精灵需要在不同的 z 坐标中
- 并且 alpha 是在着色器中设置的,而不是在 sprite 中,所以每个 sprite 都有相同的 alpha
我不太擅长着色器,所以我想不出如何不使用这两个最后的限制。如果有人可以改进它,请分享。
如何在 Unity 中禁用添加 A 值 (ARGB)?我有一个来自多个部分的 fugurine。当部分重叠时,会像图片一样添加不透明度。谢谢
我找到了 kida 做的着色器:
Shader "Custom/FlatTransparent" {
Properties {
_Color("Main Color", Color) = (1,1,1,1)
_MainTex("Base (RGB) Trans (A)", 2D) = "white" {}
}
SubShader {
Tags{ "Queue" = "Transparent" "IgnoreProjector" = "False" "RenderType" = "Transparent" }
Pass {
ColorMask A
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
fixed4 _Color;
float4 vert(float4 vertex : POSITION) : SV_POSITION {
return UnityObjectToClipPos(vertex);
}
fixed4 frag() : SV_Target {
return _Color;
}
ENDCG
}
Pass {
ColorMask RGB
Blend SrcAlpha OneMinusSrcAlpha
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
sampler2D _MainTex;
fixed4 _Color;
struct appdata {
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f {
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert(appdata v) {
v2f o;
o.vertex = UnityObjectToClipPos(v.vertex);
o.uv = v.uv;
return o;
}
fixed4 frag(v2f i) : SV_Target{
fixed4 col = _Color * tex2D(_MainTex, i.uv);
return col;
}
ENDCG
}
}
Fallback "Diffuse"
}
要正常工作,需要满足三个条件:
- 使用此着色器 ,精灵必须将其 Material 设置为 Material
- 精灵需要在不同的 z 坐标中
- 并且 alpha 是在着色器中设置的,而不是在 sprite 中,所以每个 sprite 都有相同的 alpha
我不太擅长着色器,所以我想不出如何不使用这两个最后的限制。如果有人可以改进它,请分享。