UIテキストで次のコードを実行すると
Color color = text.color;
color.a -= 1.0f;
text.color = color;
テキストのアルファ値はすぐに0に設定されます。テキストを単純にフェードアウトするにはどうすればよいですか。
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つの関数は、何かを追跡することを心配する必要がないため、少し使いやすくなっています。ただそれを呼んで、あなたの一日を過ごしてください。
コルーチンを使用できます:
例:
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 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;
これをupdateメソッドまたはコルーチンに追加します-
if(text.color != Color.clear) Color.Lerp (text.color, Color.clear, fadeSpeed * Time.deltaTime);
すべての人にとって、このスクリプトをすべてのテキストのコンポーネントとして使用できます。
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);
}
}
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
}
}
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;
}
}