专栏首页韩东吉的Unity杂货铺零基础入门 29:贴图变灰

零基础入门 29:贴图变灰

今天的内容不多,通常在游戏中,大家经常会遇到这样的需求,就是原本一个美术出来的图片,因为某种状态下,需要将他变成灰色代表当前禁用或者未激活一类的提示效果,那么,这个置灰应该如何做呢?

今天就来和大家分享一下,贴图变灰功能的制作

正题开始


下面两个对比图就是我们要实现的效果。

原图

置灰后的效果

那么应该如何实现呢?其实很简单

之前介绍的Ugui 里的Image组件,想必大家都还记得,它上面有一个Material材质球的框,可以用来选择要设置的材质球,我们这个变灰就是写一个Shader,来赋值给一个材质球,然后再把材质球,赋值给这个Image就大功告成了。

如上图所示,我创建一个文件夹,名为JiminMaterial,然后创建一个材质球名为JiminGray,在创建一个Shader文件,名为JiminGrayShader,然后一张资源图。

之后创建一个UGUI的image,在Image上将JiminGray的材质球赋值给Image组件即可完成。

通过上面的动图大家也可以看的出来,材质球对贴图的影响。

下面就是Shader的代码

Shader "Jimin/Gray"

{

Properties

{

[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}

_Color2 ("Tint2", Color) = (1,1,1,1)

// -- Add --

_GrayScale("GrayScale", Float) = 1

// -- Add

//Mask Support

_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

_ColorMask ("Color Mask", Float) = 15

//End

}

SubShader

{

Tags

{

"Queue"="Transparent"

"IgnoreProjector"="True"

"RenderType"="Transparent"

"PreviewType"="Plane"

"CanUseSpriteAtlas"="True"

}

Cull Off

Lighting Off

ZWrite Off

//ZTest [unity_GUIZTestMode]

Fog { Mode Off }

Blend SrcAlpha OneMinusSrcAlpha

Stencil

{

Ref [_Stencil]

Comp [_StencilComp]

Pass [_StencilOp]

ReadMask [_StencilReadMask]

WriteMask [_StencilWriteMask]

}

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 _Color2;

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

return OUT;

}

sampler2D _MainTex;

fixed _GrayScale;

fixed4 frag(v2f IN) : SV_Target

{

half4 color = tex2D(_MainTex, IN.texcoord);

half c = color.r * 0.3 + color.g * 0.52 + color.b * 0.18;

color.r = color.g = color.b = c * _GrayScale;

return color * _Color2;

}

ENDCG

}

}

}

好了,这回今后大家有这样的需求,都可以按照上面的方式去做啦。

今天的内容很短,也很简单,但是项目里确实必不可少的。

大家下期见哈~

本文分享自微信公众号 - 韩东吉的Unity杂货铺(DeveloperJimin),作者:Jimin

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2017-09-07

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 零基础入门 42:更新Unity2017快捷键清除日志

    Hello,之前在零基础入门系列里,有发过关于快捷键清除日志的文章,但是当时的Unity版本是Unity5.5,很多人和我说用起来都还蛮方便,但是随着2017的...

    韩东吉
  • 从象棋到太极,领悟学习之道(前言)

    不知道有多少人了解过维茨金,也不知道有多少人看过他写的书。先借鉴网上对维茨金的个人描述,让大家先有个了解。

    韩东吉
  • 零基础入门 39:Unity常用快捷键汇总

    很多同学在后台和我反馈说从Unity零基础入门,觉得知道Unity的常用快捷键很有必要,但是却不知道常用的都有什么,都是什么,既然问的人这么多,那这篇就来对快捷...

    韩东吉
  • Linux 第六天

    DataScience
  • iOS共用体

    使代码存储数据高效率的同时,有较强的可读性,可以使用共用体来增强代码可读性,同时使用位运算来提高数据存取的效率。

    用户6094182
  • 中国AI半壁江山:微软亚洲研究院20年20大创业公司

    这20年里,发表论文5000多篇,和300多所大学合作,设立了180多个博士项目,院友人数超过7000名。

    量子位
  • 程序中并没有走缓存,为什么执行时间短了

    虽然二级缓存开关是默认开启的,但是要通过注解@options或者xml</cache>进行开启,才算打开。 所以这里没打开

    MickyInvQ
  • 蛰伏到爆发!腾讯云数据库获全球“实力竞争者”

    近日,国际领先的行业研究与咨询机构Forrester正式对外发布全球最新的数据库评估报告《The Forrester Wave™: Database-As-A-...

    腾讯云数据库 TencentDB
  • 腾讯云数据库获全球“实力竞争者”

    近日,国际领先的行业研究与咨询机构Forrester正式对外发布全球最新的数据库评估报告《The Forrester Wave™: Database-As-A-...

    腾讯大数据
  • 蛰伏到爆发!腾讯云数据库获全球“实力竞争者”

    近日,国际领先的行业研究与咨询机构Forrester正式对外发布全球最新的数据库评估报告《The Forrester Wave™: Database-As-A-...

扫码关注云+社区

领取腾讯云代金券