大逃杀小地图毒气圈和安全区显示

要做这个功能有两个简单的方法

一种是在用程序生成一张图片,然后根据毒气圈和安全区位置和大小往里面填颜色

另一种渲染小地图这种图片的同时用shader把毒气圈和安全区位置都画出来

第一种方法太麻烦了,如果生成的图片太大,性能也不好所以这里只介绍第二种方法


[csharp]  view plain  copy
  1. Shader "Unlit/ImageCircle"  
  2. {  
  3.     Properties  
  4.     {  
  5.         _MainTex ("Texture", 2D) = "white" {}  
  6.         _CircleColor1("CircleColor1", Color) = (1,1,1,1)  
  7.         _Radius1("Radius1", Float) = 0.2  
  8.         _CircleWidth1("CircleWidth1", Float) = 0.1  
  9.         _CircleColor2("CircleColor2", Color) = (1,1,1,1)  
  10.         _Radius2("Radius2", Float) = 0.2  
  11.         _CircleWidth2("CircleWidth2", Float) = 0.1  
  12.         _CenterPos("CenterPos", Vector) = (0.5, 0.5, 0.5, 0.5) //两个圈的中心位置  
  13.     }  
  14.     SubShader  
  15.     {  
  16.         Tags   
  17.         {   
  18.             "Queue" = "Transparent"  
  19.             "RenderType"="Transparent"  
  20.             "IgnoreProjector" = "True"  
  21.             "PreviewType" = "Plane"  
  22.             "CanUseSpriteAtlas" = "True"  
  23.         }  
  24.   
  25.         LOD 100  
  26.         Blend SrcAlpha OneMinusSrcAlpha  
  27.   
  28.         Pass  
  29.         {  
  30.             CGPROGRAM  
  31.             #pragma vertex vert  
  32.             #pragma fragment frag  
  33.              
  34.             #include "UnityCG.cginc"  
  35.   
  36.             struct appdata  
  37.             {  
  38.                 float4 vertex : POSITION;  
  39.                 float2 uv : TEXCOORD0;  
  40.             };  
  41.   
  42.             struct v2f  
  43.             {  
  44.                 float2 uv : TEXCOORD0;  
  45.                 float4 vertex : SV_POSITION;  
  46.             };  
  47.   
  48.             sampler2D _MainTex;  
  49.             float4 _MainTex_ST;  
  50.             fixed4 _CircleColor1;  
  51.             fixed _Radius1;  
  52.             fixed _CircleWidth1;  
  53.             fixed4 _CircleColor2;  
  54.             fixed _Radius2;  
  55.             fixed _CircleWidth2;  
  56.             Vector _CenterPos;  
  57.   
  58.               
  59.             v2f vert (appdata v)  
  60.             {  
  61.                 v2f o;  
  62.                 o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);  
  63.                 o.uv = TRANSFORM_TEX(v.uv, _MainTex);  
  64.                 return o;  
  65.             }  
  66.               
  67.             fixed4 frag (v2f i) : SV_Target  
  68.             {  
  69.                 fixed4 col = tex2D(_MainTex, i.uv);  
  70.                 float2 center = i.uv - float2(_CenterPos.x,_CenterPos.y);  
  71.                 float dis = sqrt(center.x * center.x + center.y * center.y);  
  72.                 float minDistance = _Radius1 - _CircleWidth1;  
  73.                 if(dis < _Radius1 && dis > minDistance)  
  74.                 {  
  75.                     col += _CircleColor1;  
  76.                 }  
  77.   
  78.                 center = i.uv - float2(_CenterPos.z,_CenterPos.w);   
  79.                 dis = sqrt(center.x * center.x + center.y * center.y);  
  80.                 minDistance = _Radius2 - _CircleWidth2;  
  81.                 if(dis < _Radius2 && dis > minDistance)  
  82.                 {  
  83.                     col += _CircleColor2;  
  84.                 }  
  85.                 return col;  
  86.             }  
  87.             ENDCG  
  88.         }  
  89.     }  
  90. }  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值