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; } }
代码关键点说明
- 保存初始颜色:在
Start函数里获取Text组件的初始颜色,这样不管你的文本原本是红色、蓝色还是其他颜色,都能保留下来,只动Alpha。 - PingPong渐变:用
Mathf.PingPong实现Alpha在0到1之间循环变化,通过pingPongDuration控制渐变的快慢。 - 正确赋值颜色:每次创建新的Color对象,基于初始颜色修改Alpha,再赋值给Text的
color属性,确保RGB通道不受影响。
可选扩展
如果你的文本初始Alpha不是1,想要基于初始Alpha进行渐变,可以把targetAlpha的计算改成:
float targetAlpha = _originalTextColor.a * Mathf.PingPong(_timeElapsed / pingPongDuration, 1f);
内容的提问来源于stack exchange,提问作者EpicNicks
相关产品推荐
相关产品推荐

