首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iTween.FadeTo不与NGUI Sprite合作

iTween.FadeTo不与NGUI Sprite合作
EN

Stack Overflow用户
提问于 2014-06-09 07:19:09
回答 1查看 4.5K关注 0票数 1

我试着用iTween.FadeTo在NGUI雪碧中做淡出效果,但不起作用。就像这样:

代码语言:javascript
复制
iTween.FadeTo(gOFlag, iTween.Hash("alpha",1.0f,"time",6f));

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-08 00:21:54

iTween使用Unity组件来淡化事物,但是NGUI UISprites没有iTween可以轻松访问的呈现器(它们可能甚至没有所有的渲染器,但是我必须研究NGUI源代码来确认这一点)。

今天早些时候,我遇到了同样的问题,并为此做了些事情:D

步骤0:如果您不知道C#中的扩展方法,请查看这段来自Prime31的精彩视频。如果您熟悉扩展方法,只需跳到步骤1 :p

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

步骤2:将其粘贴到其中:

代码语言:javascript
复制
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:根据您的需要稍微修改代码。也许您只想传递一个像iTween这样的设置alpha值。

步骤4:在FadeIn或FadeOut上调用UISprite。请查看以下示例:

代码语言:javascript
复制
// 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的另一段很棒的视频

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24115473

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档