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官网