转载自:http://blog.csdn.net/cocos2der/article/category/1070771
猴子原创,欢迎转载。转载请注明: 转载自Cocos2D开发网–Cocos2Dev.com,谢谢!
原文地址: http://www.cocos2dev.com/?p=596
昨晚看到群里问到2DSprite怎么变成灰白图,晚上看了下,修改shader是最方便的。
下面是Sprites-Gray.shader的实现,请放入自己工程:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
|
Shader
"Sprites/Gray"
{
Properties
{
[
PerRendererData
]
_MainTex
(
"Sprite Texture"
,
2D
)
=
"white"
{
}
_Color
(
"Tint"
,
Color
)
=
(
1
,
1
,
1
,
1
)
[
MaterialToggle
]
PixelSnap
(
"Pixel snap"
,
Float
)
=
0
}
SubShader
{
Tags
{
"Queue"
=
"Transparent"
"IgnoreProjector"
=
"True"
"RenderType"
=
"Transparent"
"PreviewType"
=
"Plane"
"CanUseSpriteAtlas"
=
"True"
}
Cull
Off
Lighting
Off
ZWrite
Off
Fog
{
Mode
Off
}
Blend
One
OneMinusSrcAlpha
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma multi_compile DUMMY PIXELSNAP_ON
#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
;
v2f
vert
(
appdata_t
IN
)
{
v2f
OUT
;
OUT
.
vertex
=
mul
(
UNITY_MATRIX_MVP
,
IN
.
vertex
)
;
OUT
.
texcoord
=
IN
.
texcoord
;
OUT
.
color
=
IN
.
color *
_Color
;
#ifdef PIXELSNAP_ON
OUT
.
vertex
=
UnityPixelSnap
(
OUT
.
vertex
)
;
#endif
return
OUT
;
}
sampler2D
_MainTex
;
fixed4
frag
(
v2f
IN
)
:
SV_Target
{
fixed4
c
=
tex2D
(
_MainTex
,
IN
.
texcoord
)
*
IN
.
color
;
c
.
rgb *
=
c
.
a
;
float
gray
=
dot
(
c
.
xyz
,
float3
(
0.299
,
0.587
,
0.114
)
)
;
c
.
xyz
=
float3
(
gray
,
gray
,
gray
)
;
return
c
;
}
ENDCG
}
}
}
|
使用方法:
1
2
3
4
5
|
// Use this for initialization
void
Start
(
)
{
SpriteRenderer
render
=
this
.
GetComponent
<
SpriteRenderer
>
(
)
;
render
.
material
.
shader
=
Shader
.
Find
(
"Sprites/Gray"
)
;
}
|