You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity中Text组件Alpha值Lerp异常:运行时颜色变黑/变白问题求助

Unity Splash Screen文本Alpha PingPong渐变问题解决

嘿,我来帮你捋清楚这个问题的根源,以及怎么正确实现你想要的效果:

为什么会出现这两种异常情况?

  • 仅改Alpha文本变黑:你的textColor变量没有初始化,Unity中未赋值的Color变量默认RGB都是0(也就是黑色),所以你修改它的Alpha后赋值给文本,自然显示黑色了。
  • 函数内赋值文本变白:应该是你直接给textColor赋值了Color.white这类纯色,完全覆盖了文本原本的RGB通道,导致文本丢失了初始颜色,变成白色。

正确的实现代码

要实现只渐变Alpha同时保留文本原本颜色,关键是要先保存文本的初始RGB信息,然后只修改Alpha通道:

using UnityEngine;
using UnityEngine.UI;

public class LerpAlpha : MonoBehaviour
{
    public float pingPongDuration = 2f; // 一次从0到1再回到0的时长
    private Text _splashText;
    private Color _originalTextColor; // 保存文本初始的完整颜色(RGB+Alpha)
    private float _timeElapsed;

    void Start()
    {
        // 获取当前物体上的Text组件
        _splashText = GetComponent<Text>();
        // 保存文本的初始颜色,避免丢失原本的RGB值
        _originalTextColor = _splashText.color;
    }

    void Update()
    {
        // 累计时间,计算PingPong的Alpha值(0 ↔ 1循环)
        _timeElapsed += Time.deltaTime;
        float targetAlpha = Mathf.PingPong(_timeElapsed / pingPongDuration, 1f);

        // 基于初始颜色创建新颜色,仅修改Alpha通道
        Color updatedColor = _originalTextColor;
        updatedColor.a = targetAlpha;

        // 将新颜色赋值给文本
        _splashText.color = updatedColor;
    }
}

代码关键点说明

  1. 保存初始颜色:在Start函数里获取Text组件的初始颜色,这样不管你的文本原本是红色、蓝色还是其他颜色,都能保留下来,只动Alpha。
  2. PingPong渐变:用Mathf.PingPong实现Alpha在0到1之间循环变化,通过pingPongDuration控制渐变的快慢。
  3. 正确赋值颜色:每次创建新的Color对象,基于初始颜色修改Alpha,再赋值给Text的color属性,确保RGB通道不受影响。

可选扩展

如果你的文本初始Alpha不是1,想要基于初始Alpha进行渐变,可以把targetAlpha的计算改成:

float targetAlpha = _originalTextColor.a * Mathf.PingPong(_timeElapsed / pingPongDuration, 1f);

内容的提问来源于stack exchange,提问作者EpicNicks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 08:17:35