web-dev-qa-db-ja.com

UnityUIテキストをフェードアウトする

UIテキストで次のコードを実行すると

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

テキストのアルファ値はすぐに0に設定されます。テキストを単純にフェードアウトするにはどうすればよいですか。

7
Isaac Adni

Unity 4.6以降を使用している場合は、 CrossFadeAlpha および CrossFadeColor を利用できます。

例:

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

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

これらの2つの関数は、何かを追跡することを心配する必要がないため、少し使いやすくなっています。ただそれを呼んで、あなたの一日を過ごしてください。

12
Jonathan

コルーチンを使用できます:

例:

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;
}
3
mayo

Color Unityの値は0f..1fの範囲で機能するため、次のようになります。

  • 0.0fは0%(またはエディターに表示される0/255)です
  • 0.5fは50%(または127.5/255)です
  • 1.0fは100%(または255/255)です

1.0fで引くと、値は0%になります。 0.1fのような別のデクリメントを試してください。

color.a -= 0.1f;
2
Chris McFarland

これをupdateメソッドまたはコルーチンに追加します-

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

1
shreks7

すべての人にとって、このスクリプトをすべてのテキストのコンポーネントとして使用できます。

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);
    }
}
0
Amir Savand

text Objectを使用する場合、これが私のより簡単な解決策です。コードは、アタッチされているTextオブジェクトのテキストをフェードインおよびフェードアウトします。速度はblinkStepを使用して変更できます。 (テストするには、公開するだけです)。これをコピーして「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
    }
}
0
kavehmb2000

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;
    }

}
0
Jamshaid Alam