61 lines
1.8 KiB
Plaintext
61 lines
1.8 KiB
Plaintext
Shader "Custom/BlackCircleWithOutline"
|
|
{
|
|
Properties
|
|
{
|
|
_InnerColor("Inner Color", Color) = (0,0,0,0.9) // 内部颜色(黑色)
|
|
_OutlineColor("Outline Color", Color) = (1,1,1,0.9) // 轮廓颜色(白色)
|
|
_Thickness("Thickness", Range(0, 0.5)) = 0.05 // 圆圈轮廓厚度
|
|
}
|
|
SubShader
|
|
{
|
|
Tags { "Queue" = "Transparent" "RenderType" = "Transparent" }
|
|
LOD 100
|
|
|
|
Blend SrcAlpha OneMinusSrcAlpha // 开启透明混合
|
|
|
|
Pass
|
|
{
|
|
CGPROGRAM
|
|
#pragma vertex vert
|
|
#pragma fragment frag
|
|
#include "UnityCG.cginc"
|
|
|
|
struct appdata_t {
|
|
float4 vertex : POSITION;
|
|
float2 uv : TEXCOORD0;
|
|
};
|
|
|
|
struct v2f {
|
|
float2 uv : TEXCOORD0;
|
|
float4 vertex : SV_POSITION;
|
|
};
|
|
|
|
fixed4 _InnerColor; // 内部颜色
|
|
fixed4 _OutlineColor; // 轮廓颜色
|
|
float _Thickness; // 圆圈轮廓厚度
|
|
|
|
v2f vert(appdata_t v) {
|
|
v2f o;
|
|
o.vertex = UnityObjectToClipPos(v.vertex);
|
|
o.uv = v.uv;
|
|
return o;
|
|
}
|
|
|
|
fixed4 frag(v2f i) : SV_Target {
|
|
float2 center = float2(0.5, 0.5); // 圆心
|
|
float dist = distance(i.uv, center); // 当前像素到圆心的距离
|
|
|
|
if (dist < (0.5 - _Thickness)) {
|
|
return _InnerColor; // 圆心内显示黑色
|
|
}
|
|
else if (dist <= 0.5) {
|
|
return _OutlineColor; // 在轮廓区域显示白色
|
|
}
|
|
|
|
// 外部区域返回完全透明
|
|
return float4(0, 0, 0, 0);
|
|
}
|
|
ENDCG
|
|
}
|
|
}
|
|
} |