Shader "Zhanyou/Character/PlayerTransparent" { Properties { _MainTex("Main Tex", 2D) = "white" {} _Color ("Color", Color) = (1, 1, 1, 1) _Cutoff("Alpha Cutoff", Range(0, 1)) = 0.5 // 内发光边线颜色 _OutlineColor("OutLine Color", Color) = (0.389, 0.377, 0.471, 1.0) // 内发光边线倍数 _Outline("OutLine Power", float) = 22 } Category { Tags { "Queue"="AlphaTest+52" "IgnoreProjector"="True" "RenderType"="CharacterCutout" } Blend SrcAlpha OneMinusSrcAlpha Cull Back Lighting Off ZWrite Off ZTest LEqual Offset 0, -0.01 SubShader { Pass { CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma multi_compile_fog #pragma multi_compile __ UseRimColor #include "UnityCG.cginc" #include "Gles2Helper.cginc" uniform sampler2D _MainTex; uniform float4 _MainTex_ST; uniform half4 _Color; uniform half _Cutoff; uniform half4 _OutlineColor; uniform half _Outline; struct appdata_t { float4 vertex : POSITION; float2 texcoord : TEXCOORD0; #if UseRimColor float3 normal : NORMAL; float4 tangent : TANGENT; #endif }; struct v2f { float4 vertex : SV_POSITION; float2 texcoord : TEXCOORD0; UNITY_FOG_COORDS(1) #if UseRimColor float rim : TEXCOORD3; #endif }; v2f vert (appdata_t v) { v2f o; o.vertex = UnityObjectToClipPos(v.vertex); o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex); #if UseRimColor half3 objectViewDir = ObjSpaceViewDir(v.vertex); TANGENT_SPACE_ROTATION; o.rim = saturate(1 - normalize(MUL_3x3_WITH_VECTOR(rotation, objectViewDir)).z); o.rim = pow(o.rim, _Outline); #endif UNITY_TRANSFER_FOG(o, o.vertex); return o; } fixed4 frag (v2f i) : SV_Target { fixed4 c = tex2D(_MainTex, i.texcoord); clip (c.a - _Cutoff); c.rgb *= _Color.rgb; c.a *= _Color.a; #if UseRimColor c.rgb += _OutlineColor.rgb * _OutlineColor.a * i.rim; #endif UNITY_APPLY_FOG(i.fogCoord, c); return c; } ENDCG } Pass { Name "ShadowCaster" Tags { "LightMode" = "ShadowCaster" } ZWrite On ZTest LEqual Cull Off CGPROGRAM #pragma vertex vert #pragma fragment frag #pragma target 2.0 #pragma multi_compile_shadowcaster #include "UnityCG.cginc" struct v2f { V2F_SHADOW_CASTER; }; v2f vert( appdata_base v ) { v2f o; TRANSFER_SHADOW_CASTER_NORMALOFFSET(o) return o; } float4 frag( v2f i ) : SV_Target { SHADOW_CASTER_FRAGMENT(i) } ENDCG } } CustomEditor "PlayerTransparentShaderGui" Fallback "Unlit/Texture" } }