DoTween对UI进行DoFade操作存在问题及解决办法

Unity版本:5.2, 5.4

当使用this.GetComponent<Image().material.DOFade(0,
2).SetEase(Ease.InBounce);来对UGUI的Image进行褪色操作的时候本质是对UI的Graphic对象(Text,Image等都为Graphic的子类)的material进行操作,下例是对Text组件进行褪色操作:Transform.GetComponent().material.DoFade(0,1)。虽然脚本只挂在一个Text组件的物体上,但1秒之后发现,整个UI界面全部变为透明。

(我也很纳闷,cube01.GetComponent<Renderer ().material.color =
Color.black;这样的代码照理说是这样执行的(<http://www.jianshu.com/p/ababf547d992):

Material lastMat = cube01.GetComponent<Renderer ().material

Material m = Instantiate(lastMat) as Material

cube01.GetComponent<Renderer ().material = m

m.color = Color.black

应该是最自己持有的material进行操做。。。

经测试发现,所有使用缺省material的组件都是使用的默认的material,而这个material只存在一份,所有UI组件使用的默认material都只是该material的引用,在DoTween对其进行褪色操作之后,该material的alpha值保持为0不变,且游戏重新开始也不会将其alpha值重置为1。

解决办法:

导入DoTween后请确保Setup DoTween, Tools/DoTween Utility Panel/Setup
DoTween…。导入后就可以使用Image.DoFade了。

使用Unity自带的Graphic.CrossFadeAlpha(float alpha, float duration, bool
ignoreTimeScale)函数来操作

自己扩展DoTween的方法,下面是我扩展的一个例子,可以参考DoTwen官网的Creating custom plugins
example

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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/  DoFadeTest.cs



/  Project: GUITest



/  Created by zhiheng.shao



/  Copyright  2016年 zhiheng.shao. All rights reserved.



/  Description



using UnityEngine;



using System.Collections;



using DG.Tweening;



using UnityEngine.UI;



using DG.Tweening.RickExtension;



public class DoFadeTest : MonoBehaviour



{



    // Use this for initialization



    Start()



    {



        .GetComponent<Image().DOFade(, ).SetEase(Ease.InBounce);



    }



}



namespace DG.Tweening.RickExtension



{



    public static class DOTweenExteion



    {



        public static Tweener DOFade( Image image, float endValue, float
duration)



        {



            Debug.Log("CustomDoFade");



            return DOTween.To(image.AlphaGetter, image.AlphaSetter,
endValue, duration);



        }



        private static float AlphaGetter( Image image)



        {



            return image.color.a;



        }



        private static  AlphaSetter( Image image, float alpha)



        {



            Color oldColor = image.color;



            oldColor.a = alpha;



            image.color = oldColor;



        }



    }



}

附:DoTween官网

评论

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×