代码片段和注释 ··· Shader “Outline_/PlayerXRay” { Properties { //_MainTex (“Base (RGB)”, 2D) = “white” {} //_XRayTex (“XRayTex (RGB)”, 2D) = “white” {} _Color (“Color (RGB)”, Color) = (0.745,0.631,0.529,1) //_LightDir (“Light Direction” , Vector) = (8,0,0,0) } SubShader { Tags { “Queue” = “Transparent-20”} LOD 200
CGINCLUDE #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float3 normal : NORMAL; float3 texcoord : TEXCOORD0; //纹理坐标 }; //顶点 struct v2f { float2 uv_MainTex:TEXCOORD0; float4 pos : POSITION; float4 color : COLOR; }; //像素 float4 _Color ; v2f vert(appdata v) { v2f o; o.pos = UnityObjectToClipPos (v.vertex);//顶点坐标到透视坐标 float3 viewDir = normalize(ObjSpaceViewDir(v.vertex));//视线方向 o.color = _Color; float N = dot(viewDir,v.normal);//视线到法线的余弦值 if(N < 0) N=0; o.color = _Color ;//_Color * N o.color.a = 0.5;//N * 0.0001; o.uv_MainTex = v.texcoord.xy; return o; } ENDCG Pass{ Cull Back //裁剪背面 ZTest Greater //远的覆盖近的 ZWrite Off //不把 xray写进去,会影响后面的渲染 // Blend One One CGPROGRAM #pragma vertex vert #pragma fragment frag float4 frag(v2f i) :COLOR { return i.color;//texColor; } ENDCG } } FallBack "Diffuse"} ···