zoukankan      html  css  js  c++  java
  • 【吃鸡】毒圈展示

    <1>2种圈,1个场景,1个UI

    <2>场景毒圈

    美术制作圆柱形网格,上下剔除,圆柱侧面面越多越好(内存渲染会多占用点)

    shader实现:UV动画(写得不好)

    Shader "wk/Particles/AdditiveGas" {
    Properties {
    	_TintColor ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
    	_MainTex ("Particle Texture", 2D) = "white" {}
    	_FlashTex ("Flash Texture", 2D) = "white" {}
    	_InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
    }
    
    Category {
    	Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
    	Blend SrcAlpha One
    	AlphaTest Greater .01
    	ColorMask RGB
    	Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
    	BindChannels {
    		Bind "Color", color
    		Bind "Vertex", vertex
    		Bind "TexCoord", texcoord
    	}
    	
    	// ---- Fragment program cards
    	SubShader {
    		Pass {
    		
    			CGPROGRAM
    			#pragma vertex vert
    			#pragma fragment frag
    			#pragma fragmentoption ARB_precision_hint_fastest
    			#pragma multi_compile_particles
    
    			#include "UnityCG.cginc"
    
    			sampler2D _MainTex;
    			sampler2D _FlashTex;			
    			float4 _TintColor;
    			
    			struct appdata_t {
    				float4 vertex : POSITION;
    				float4 color : COLOR;
    				float2 texcoord : TEXCOORD0;
    			};
    
    			struct v2f {
    				float4 vertex : POSITION;
    				float4 color : COLOR;
    				float2 texcoord : TEXCOORD0;
    //				#ifdef SOFTPARTICLES_ON
    //				float4 projPos : TEXCOORD1;
    //				#endif
    			};
    			
    			float4 _MainTex_ST;
    
    			v2f vert (appdata_t v)
    			{
    				v2f o;
    				o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
    //				#ifdef SOFTPARTICLES_ON
    //				o.projPos = ComputeScreenPos (o.vertex);
    //				COMPUTE_EYEDEPTH(o.projPos.z);
    //				#endif
    				o.color = v.color;
    				o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
    				return o;
    			}
    
    			sampler2D _CameraDepthTexture;
    			float _InvFade;
    			
    			fixed4 frag (v2f i) : COLOR
    			{
    //				#ifdef SOFTPARTICLES_ON
    //				float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
    //				float partZ = i.projPos.z;
    //				float fade = saturate (_InvFade * (sceneZ-partZ));
    //				i.color.a *= fade;
    //				#endif			
    				float2 uvs =  i.texcoord * 100+_Time.x;//mian
    				float2 uv =  i.texcoord + _Time.x/2;//Flash
    				float2 uv1 = float2(uv.x,uv.y);// float2(fract(uv.x),fract(uv.y));
    				float2 uv2 =  float2(uvs.x,uvs.y);
    				float4 col = tex2D(_FlashTex,  uv1 );
    				col.a *= 4;
    				col.g *= 4;
    				return 4f  * _TintColor  * tex2D(_MainTex, uv2)  * col;
    			}
    			ENDCG 
    		}
    	} 	
    	
    	// ---- Dual texture cards
    	SubShader {
    		Pass {
    			SetTexture [_MainTex] {
    				constantColor [_TintColor]
    				combine constant * primary
    			}
    			SetTexture [_MainTex] {
    				combine texture * previous DOUBLE
    			}
    		}
    	}
    	
    	// ---- Single texture cards (does not do color tint)
    	SubShader {
    		Pass {
    			SetTexture [_MainTex] {
    				combine texture * primary
    			}
    		}
    	}
    }
    }
    

      

    <3>UI毒圈

    UI有一个毒圈范围和一个安全区范围显示在地图上

    试了一些办法,还是用Shader实现

    计算好半径,设置Shader属性

    Shader "UI/UI-Circle" 
    {
    	Properties
    	{
    		//[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
    		_Color ("Tint", Color) = (1,1,1,1)
    		
    		_StencilComp ("Stencil Comparison", Float) = 8
    		_Stencil ("Stencil ID", Float) = 0
    		_StencilOp ("Stencil Operation", Float) = 0
    		_StencilWriteMask ("Stencil Write Mask", Float) = 255
    		_StencilReadMask ("Stencil Read Mask", Float) = 255
    
    
    	
    		_CircleWidth("Cull Radius",Float) = 0.49
    
    		_ColorMask ("Color Mask", Float) = 15
    	}
    
    	SubShader
    	{
    		Tags
    		{ 
    			"Queue"="Transparent" 
    			"IgnoreProjector"="True" 
    			"RenderType"="Transparent" 
    			"PreviewType"="Plane"
    			"CanUseSpriteAtlas"="True"
    		}
    		
    		Stencil
    		{
    			Ref [_Stencil]
    			Comp [_StencilComp]
    			Pass [_StencilOp] 
    			ReadMask [_StencilReadMask]
    			WriteMask [_StencilWriteMask]
    		}
    
    		Cull Off
    		Lighting Off
    		ZWrite Off
    		ZTest [unity_GUIZTestMode]
    		Fog { Mode Off }
    		Blend SrcAlpha OneMinusSrcAlpha
    		ColorMask [_ColorMask]
    
    		Pass
    		{
    		CGPROGRAM
    			#pragma vertex vert
    			#pragma fragment frag
    			#include "UnityCG.cginc"
    			
    			struct appdata_t
    			{
    				float4 vertex   : POSITION;
    				float4 color    : COLOR;
    				float2 texcoord : TEXCOORD0;
    			};
    
    			struct v2f
    			{
    				float4 vertex   : SV_POSITION;
    				fixed4 color    : COLOR;
    				half2 texcoord  : TEXCOORD0;
    			};
    			
    			fixed4 _Color;
    			float _CircleWidth;
    
    			v2f vert(appdata_t IN)
    			{
    				v2f OUT;
    				OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
    				OUT.texcoord = IN.texcoord;
    #ifdef UNITY_HALF_TEXEL_OFFSET
    				OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
    #endif
    				OUT.color = IN.color * _Color;
    				return OUT;
    			}
    
    			//sampler2D _MainTex;
    
    			fixed4 frag(v2f IN) : SV_Target
    			{
    			    float2  uv = IN.texcoord;
                    half4 color = IN.color;
    				float len = length(float2(0.5,0.5)-uv);
    				if(len<_CircleWidth || len>0.5){
    				    color.a = 0;
    				}
    				clip (color.a - 0.01);
    				return color;
    			}
    		ENDCG
    		}
    	}
    }
    

      

  • 相关阅读:
    去除文件及子文件的隐藏和只读属性
    一个比较全的C++农历算法(转)
    Activity 的窗口去头的方式
    SQL查询显示行号、随机查询、取指定行数据
    C++中map用法详解(转)
    窗口消息大全(转)
    CTreeCtrl的用法汇总(转)
    CTreeView和CTreeCtrl的使用方法(转)
    用CImage加载内存里的Image(转)
    序列化编程,保存和读取配置文件
  • 原文地址:https://www.cnblogs.com/cocotang/p/10825584.html
Copyright © 2011-2022 走看看