最簡單高效的辦法是用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
|
Shader
"Custom/AlphaMask" { Properties { _Color
("Main Color", Color) = (1,1,1,1) _MainTex
("Base (RGB) Trans (A)", 2D) = "white" {} _MaskTex
("Mask (A)", 2D) = "white" {} _Progress
("Progress", Range(0,1)) = 0.5 } Category { Lighting
Off ZWrite
Off Cull
back Fog
{ Mode Off } Tags
{"Queue"="Transparent" "IgnoreProjector"="True"} Blend
SrcAlpha OneMinusSrcAlpha SubShader { Pass { CGPROGRAM #pragma
vertex vert #pragma
fragment frag sampler2D
_MainTex; sampler2D
_MaskTex; fixed4
_Color; float
_Progress; struct
appdata { float4
vertex : POSITION; float4
texcoord : TEXCOORD0; }; struct
v2f { float4
pos : SV_POSITION; float2
uv : TEXCOORD0; }; v2f
vert (appdata v) { v2f
o; o.pos
= mul(UNITY_MATRIX_MVP, v.vertex); o.uv
= v.texcoord.xy; return
o; } half4
frag(v2f i) : COLOR { fixed4
c = _Color * tex2D(_MainTex, i.uv); fixed
ca = tex2D(_MaskTex, i.uv).a; c.a
*= ca >= _Progress ? 0f : 1f; return
c; } ENDCG } } SubShader { AlphaTest
LEqual [_Progress] Pass { SetTexture
[_MaskTex] {combine texture} SetTexture
[_MainTex] {combine texture, previous} } } } Fallback
"Transparent/VertexLit" } |
主紋理可以指定任意圖片,不指定圖片直接用顏色也可以。Mask可以指定任意帶Alpha的圖片,只要是Alpha從0-1連續變化就行了,PhotoShop裏面一分鐘搞定的東西,你懂的。
那個Progress量就是遮罩範圍的大小了。
要運行時設置,在Update裏這樣寫:renderer.material.SetVector("_Progress",當前血量、進度百分比等等..);注意範圍是0-1。
完全DIY,效果完全取決於圖片和DIY的遮罩。
附兩個遮罩圖片供測試,一個是條形,一個是圓形,純測試用隨便作的,不夠美觀。