Fading TextMeshPro Alpha 瞬间褪色

Fading TextMeshPro Alpha is instantly fading

我试过使用 LeanTween,现在我自己写了协程,但都不起作用。目标是让 TextMeshPro 元素的文本在一段时间内淡入/淡出,这应该足够简单但显然不是。这是协程:

private IEnumerator FadeText(float target, float duration) {
        Color color = text.color;
        float timer = 0f;
        float alpha = color.a;
        while(timer < duration) {
            timer += Time.deltaTime;
            print($"{timer / duration}% is: {Mathf.Lerp(alpha, target, timer / duration)}");
            color.a = Mathf.Lerp(alpha, target, timer / duration);
            text.color = color;

            yield return new WaitForEndOfFrame();
        }
    }

Debug.Log 显示正确的值(在所需的持续时间内从 0 到 255,反之亦然)但文本只是弹出。上面的代码是这样的(再次:使用 LeanTween同样的结果): Example

文本“升级”应该在 5 秒内淡出,并在 0.4 秒内淡出。

我是不是漏掉了什么?

事实证明,Color 在内部使用 0 到 1 之间的值,而不是我一直认为的 0 到 255 之间的值。将上面的代码与 0 和 1 一起使用可以正常工作。 LeanTween 版本也是如此。

调查API -> Color

Each color component is a floating point value with a range from 0 to 1.

原始颜色类型为 Color32

Each color component is a byte value with a range from 0 to 255.

所以要么

  • 使用 Color32ColorColor32 之间存在隐式转换,因此您基本上可以互换使用它们,请参阅 Color32.Color and Color32.Color32

  • 或简单地将输入值更改为 01 之间的 float

private float timeElapsed;
private float valueToLerp;
private float delayTime = 5f; 
    Update()
    {
        if ( FadeOut)
        {
            valueToLerp = Mathf.Lerp(1, 0, timeElapsed / delayTime);
            timeElapsed += Time.deltaTime;
            textMesh.color = new Color(textMesh.color.r, textMesh.color.g,textMesh.color.b, valueToLerp);
        }
    }