unity游戏开发之NGUI的UISprite染色

本文介绍了在Unity游戏开发中如何使用NGUI的UISprite进行染色,以达到按钮失效变灰等效果。通过更换渲染材质和染色材质,可以动态切换颜色,减少资源浪费并提高维护性。文中提供了具体的Shader代码示例,包括普通颜色染色和灰化效果,并展示了如何在代码中实现颜色切换。
摘要由CSDN通过智能技术生成



      游戏的UI开发中经常会遇到染色问题。例如按钮失效变灰的效果,同一个道具通过策划表配的颜色值染上红绿蓝紫等颜色,效果如下



       最笨最挫的方法当然是让美术多出几个资源图,这样的一个缺点是浪费资源,在手游上资源的大小显得尤为重要。而且不好维护和复用,修改一个资源需要同时修改其他颜色的多个同类资源。一种比较好的解决方案是通过更换渲染的材质,用染色材质代替原来的材质,然后把原来材质的主纹理和透明纹理赋值给新的材质。这样就可以实现用程序动态切换颜色,而且只需要一个基础资源,节省资源大小,容易维护。

下面给出这个解决方案的流程图,如下图所示



       下面写一个例子,通过按r键,g键,b键,y键来动态切换染红色,染绿色,染蓝色,灰化效果。项目的GameObject图如下


染色普通颜色的材质对应的shader如下

[plain]
  1. Shader "Winter/ChangeColor" {  
  2.     Properties {  
  3.         _MainTex ("Base (RGB)", 2D) = "white" {}  
  4.         _Color ("Main Color", Color) = (1,1,1,1)  
  5.           
  6.     }  
  7.     SubShader {  
  8.         Tags { "Queue" = "Transparent+10" }  
  9.         LOD 200  
  10.          Pass  
  11.          {  
  12.          ZWrite On  
  13.          ZTest Off  
  14.   
  15.   
  16.             Blend SrcAlpha OneMinusSrcAlpha  
  17.             Lighting Off  
  18.             //Cull Off  
  19.             CGPROGRAM  
  20.             #pragma vertex vert  
  21.             #pragma fragment frag  
  22.   
  23.             #include "UnityCG.cginc"  
  24.   
  25.             sampler2D _MainTex;  
  26.             fixed4 _Color;  
  27.             float _ColorCtrl;  
  28.   
  29.             struct v2f   
  30.             {  
  31.                 float4  pos : SV_POSITION;  
  32.                 float2  uv : TEXCOORD0;  
  33.             };  
  34.   
  35.             float4 _MainTex_ST;  
  36.   
  37.             v2f vert (appdata_base v)  
  38.             {  
  39.                 v2f o;  
  40.                 o.pos = mul (UNITY_MATRIX_MVP, v.vertex);  
  41.                 o.uv = TRANSFORM_TEX (v.texcoord, _MainTex);  
  42.                 return o;  
  43.             }  
  44.   
  45.             fixed4 frag (v2f i) : COLOR  
  46.             {  
  47.                 fixed4 texcol = tex2D (_MainTex, i.uv);  
  48.                 result = texcol * _Color;  
  49.                 result.a = texcol.a;  
  50.   
  51.                 return result;  
  52.             }  
  53.             ENDCG  
  54.          }  
  55.     }   
  56. }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值