2015-01-11 28 views
6

Wenn ich den folgenden Code auf meinem UI TextText Unity UI Ausblenden

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

den Alpha-Wert des Textes ausgeführt wird sofort auf 0 gesetzt Wie kann ich den Text verblassen einfach.

+0

Es ist ein super einfache Möglichkeit, Einzeiler diese mit den neuen UI-Bibliotheken in Unity 4.6 zu tun und nach oben . Ich habe unten eine Antwort für jeden Interessierten geworfen. – Jonathan

Antwort

2

Fügen Sie diese auf die Update-Methode oder einem Koroutine -

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

+0

Ich bin neu in Unity. Dies scheint ein wenig ineffizient. Aktualisieren Sie die Farbe des Textes in jedem Frame, auch nachdem er vollständig ausgeblendet wurde? –

+0

Sie müssen etwas mehr erklären, einige Anfänger werden es schwer haben zu verstehen, wann und wo diese Codezeile geschrieben werden soll. –

2

Color Werte in der Einheit arbeitet in einem Bereich 0f..1f, so:

  • 0.0f 0% (oder 0/255 wie im Editor dargestellt)
  • 0.5f beträgt 50% (oder 127,5/255)
  • 1.0f beträgt 100% (oder 255/255)

subtrahierend durch 1.0f wird der Wert auf 0% zu bringen. Versuchen Sie ein anderes Dekrement wie 0.1f:

color.a -= 0.1f; 
2

Sie können Koroutinen verwenden:

Beispiel:

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

Hier ist meine einfachere Lösung, wenn Sie T verwenden ext Objekt. Der Code blendet den Text des Textobjekts ein und aus. Die Geschwindigkeit kann mit blinkStep geändert werden. (um es zu testen, mach es einfach öffentlich). Sie können es einfach kopieren und in ein Skript mit dem Namen 'TextFlicker' einfügen oder die Klasse in den Namen Ihres Skripts umbenennen. ;-)

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

Wenn Sie Unity verwenden 4.6 und höher Sie die Vorteile von CrossFadeAlpha und CrossFadeColor nehmen.

Beispiel:

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

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

Diese beiden Funktionen sind ein bisschen schöner zu verwenden, da Sie müssen nicht darum kümmern, den Überblick über alles zu halten. Ruf es einfach an und geh rund um den Tag.

0

Hier ist Blink Code für alle UI Text oder Elemente.

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

Für alle, können Sie dieses Skript als eine Komponente für jeden Text verwenden:

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); 
    } 
} 
Verwandte Themen