Unity3d iTween.FadeTo不与NGUI Sprite合作

Unity3d iTween.FadeTo不与NGUI Sprite合作,unity3d,ngui,itween,Unity3d,Ngui,Itween,我正在尝试使用iTween.FadeTo在NGUI的精灵中制作淡出效果,但没有效果。 就像这样: iTween.FadeTo(gOFlag, iTween.Hash("alpha",1.0f,"time",6f)); 我做错什么了吗?如果是,请告诉我。iTween使用Unity Renderer组件淡入淡出效果,但NGUI UISprites没有iTween可以轻松访问的渲染器(他们甚至可能没有所有渲染器,但我必须研究NGUI源以确认这一点) 事实上,我今天早些时候遇到了同样的问题,并为此做了

我正在尝试使用iTween.FadeTo在NGUI的精灵中制作淡出效果,但没有效果。 就像这样:

iTween.FadeTo(gOFlag, iTween.Hash("alpha",1.0f,"time",6f));

我做错什么了吗?如果是,请告诉我。

iTween使用Unity Renderer组件淡入淡出效果,但NGUI UISprites没有iTween可以轻松访问的渲染器(他们甚至可能没有所有渲染器,但我必须研究NGUI源以确认这一点)

事实上,我今天早些时候遇到了同样的问题,并为此做了一些准备:D

步骤0:如果您不知道C#中的扩展方法,请查看。如果您熟悉扩展方法,请跳到步骤1:p

步骤1:创建一个名为ExtensionMethods的新脚本。这将不是一个单一行为,而是一个普通的静态类

步骤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();
    }
}
奖励步骤:不知道onComplete业务是如何运作的?查看有关操作的信息

// 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!")
}