我正在尝试使用 iTween.FadeTo 在 NGUI 的 Sprite 中制作淡出效果,但不工作。像那样:
iTween.FadeTo(gOFlag, iTween.Hash("alpha",1.0f,"time",6f));
如果是的话,我做错了什么请告诉我。
iTween 使用 Unity Renderer 组件来淡化事物,但 NGUI UISprite 没有 iTween 可以轻松访问的渲染器(它们甚至可能没有全部,不过我必须研究 NGUI 源来确认这一点)。
实际上我今天早些时候遇到了同样的问题并为此做了一些事情:D
第 0 步:如果您不了解 C# 中的扩展方法,请查看Prime31 中的这个精彩视频。如果您熟悉扩展方法,请跳到第 1 步:p
第 1 步:制作一个名为 ExtensionMethods 的新脚本。这将不是一个 Monobehaviour,而是一个普通的静态类。
第2步:将其粘贴到其中:
public static void FadeIn (this UIWidget uiWidget, float fadeTime, AnimationCurve fadeCurve, float startAlpha, System.Action onComplete)
{
uiWidget.StartCoroutine(DoFadeIn(uiWidget, fadeTime, fadeCurve, startAlpha, onComplete));
}
static System.Collections.IEnumerator DoFadeIn (UIWidget uiWidget, float fadeTime, AnimationCurve fadeCurve, float startAlpha, System.Action onComplete)
{
Color endCol = uiWidget.color;
endCol.a = 1f;
Color startCol = uiWidget.color;
if (startAlpha >= 0)
{
startCol.a = startAlpha;
}
float fTimer = 0;
while (fTimer < fadeTime)
{
fTimer += Time.deltaTime;
uiWidget.color = Color.Lerp(startCol, endCol, fadeCurve.Evaluate(fTimer/fadeTime));
yield return null;
}
if (onComplete != null)
{
onComplete();
}
}
public static void FadeOut (this UIWidget uiWidget, float fadeTime, AnimationCurve fadeCurve, System.Action onComplete)
{
uiWidget.StartCoroutine(DoFadeOut(uiWidget, fadeTime, fadeCurve, onComplete));
}
static System.Collections.IEnumerator DoFadeOut (UIWidget uiWidget, float fadeTime, AnimationCurve fadeCurve, System.Action onComplete)
{
Color endCol = uiWidget.color;
endCol.a = 0f;
Color startCol = uiWidget.color;
float fTimer = 0;
while (fTimer < fadeTime)
{
fTimer += Time.deltaTime;
uiWidget.color = Color.Lerp(startCol, endCol, fadeCurve.Evaluate(fTimer/fadeTime));
yield return null;
}
if (onComplete != null)
{
onComplete();
}
}
第 3 步:根据您的需要稍微修改代码。也许您只想传递一个设置的 alpha 值,例如 iTween。
第 4 步:在 UISprite 上调用 FadeIn 或 FadeOut。查看以下示例:
// Fill this by dragging the UISprite you want to Fade into the inspector
public UISprite uiSprite;
// Fade Time
public float fadeTime = 1f;
// The easing for the fade. Make sure you have a curve in the inspector or the fade will be instant / might break.
public AnimationCurve fadeCurve;
void FadeTest ()
{
uiSprite.FadeIn(fadeTime, fadeCurve, 0f, OnFadeFinish);
}
void OnFadeFinish ()
{
Debug.Log("Fade done!")
}
奖励步骤:不知道 onComplete 业务是如何运作的?查看来自 Prime31 的关于 Actions 的另一个精彩视频。