简体   繁体   English

淡出Unity UI文本

[英]Fade out Unity UI text

When I run the following code on my UI text 当我在UI文本上运行以下代码时

Color color = text.color;
color.a -= 1.0f;
text.color = color;

The alpha value of the text is immediately set to 0. How can I simply fade out the text. 文本的alpha值立即设置为0.我怎样才能简单地淡出文本。

If you are using Unity 4.6 and newer you can take advantage of CrossFadeAlpha and CrossFadeColor . 如果您使用的是Unity 4.6及更高版本,则可以利用CrossFadeAlphaCrossFadeColor

Example: 例:

// fade to transparent over 500ms.
text.CrossFadeAlpha(0.0f, 0.05f, false);

// and back over 500ms.
text.CrossFadeAlpha(1.0f, 0.05f, false);

These two functions are a bit nicer to use since you don't have to worry about keeping track of anything. 这两个函数使用起来更好一些,因为您不必担心跟踪任何事情。 Just call it and go about your day. 只需打电话,即可开始新的一天。

You can use Coroutines: 您可以使用协同程序:

Example: 例:

public Text text;
public void FadeOut()
{
    StartCoroutine(FadeOutCR);
}

private IEnumerator FadeOutCR()
{
    float duration = 0.5f; //0.5 secs
    float currentTime = 0f;
    while(currentTime < duration)
    {
        float alpha = Mathf.Lerp(1f, 0f, currentTime/duration);
        text.color = new Color(text.color.r, text.color.g, text.color.b, alpha);
        currentTime += Time.deltaTime;
        yield return null;
    }
    yield break;
}

Color values in Unity work in a 0f..1f range, so: Unity中的颜色值工作在0f..1f范围内,因此:

  • 0.0f is 0% (or 0/255 as shown in the editor) 0.0f为0%(或编辑器中显示的0/255)
  • 0.5f is 50% (or 127.5/255) 0.5f是50%(或127.5 / 255)
  • 1.0f is 100% (or 255/255) 1.0f是100%(或255/255)

Subtracting by 1.0f is bringing the value to 0%. 减去1.0f会使该值为0%。 Try a different decrement like 0.1f : 尝试不同的减量,如0.1f

color.a -= 0.1f;

将此添加到更新方法或协程 -

if(text.color != Color.clear) Color.Lerp (text.color, Color.clear, fadeSpeed * Time.deltaTime);

here is my simpler solution if you use Text Object. 如果您使用文本对象,这是我更简单的解决方案。 The code fades the Text object's text it is attached to in and out. 代码淡化Text对象的文本,它附加到其中。 the speed can be changed using blinkStep. 可以使用blinkStep更改速度。 (in order to test, just make it public). (为了测试,只需公开)。 You can just copy and paste it in a script named 'TextFlicker' or rename the class to whatever is your script's name. 您只需将其复制并粘贴到名为“TextFlicker”的脚本中,或将该类重命名为脚本名称。 ;-) ;-)

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class TextFlicker : MonoBehaviour {
    float blinkDurationSecs =1f;
    float blinkProgress =0f;
    float blinkStep = 0.01f;
    //Color txtColor = Color.black;
    Text blinkingText;
    // Use this for initialization
    void Start () {
        blinkingText = GetComponentInParent<Text>();
    }

    // Update is called once per frame
    void Update () {
        if ((blinkProgress > 1)||(blinkProgress<0)) {
            blinkStep*=-1f;
        } 
        blinkProgress+=blinkStep;
        blinkingText.color = Color.Lerp (Color.black, Color.white, blinkProgress);// or whatever color you choose
    }
}

Here is Blink Code for any UI Text or Elements. 这是任何UI文本或元素的闪烁代码。

using UnityEngine;
using UnityEngine.UI;
using System.Collections;

public class Blink : MonoBehaviour {

    // this is the UI.Text or other UI element you want to toggle
    public MaskableGraphic imageToToggle;

    public float interval = 1f;
    public float startDelay = 0.5f;
    public bool currentState = true;
    public bool defaultState = true;
    bool isBlinking = false;


    void Start()
    {
        imageToToggle.enabled = defaultState;
        StartBlink();
    }

    public void StartBlink()
    {
        // do not invoke the blink twice - needed if you need to start the blink from an external object
        if (isBlinking)
            return;

        if (imageToToggle !=null)
        {
            isBlinking = true;
            InvokeRepeating("ToggleState", startDelay, interval);
        }
    }

    public void ToggleState()
    {
        imageToToggle.enabled = !imageToToggle.enabled;
    }

}

For everyone, you can use this script as a component for every text: 对于每个人,您可以将此脚本用作每个文本的组件:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;

public class FadeController : MonoBehaviour
{
    public float fadeDuration = 0.5f;

    public float fadeDelay = 0f;

    public float fadeTo = 0f;

    public Text text;

    void Start ()
    {
        // Fade with initial delay
        Invoke ("fade", fadeDelay);
    }

    public void fade ()
    {
        // Fade in/out
        text.CrossFadeAlpha (fadeTo, fadeDuration, false);
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM