所以我有一个按钮,可以改变物体的颜色。我正在使用color.lerp,但我需要它逐渐改变。就像慢慢地。我现在所拥有的:
public Renderer engineBodyRenderer;
public float speed;
public Color startColor, endColor;
float startTime;
// Start is called before the first frame update
void Start()
{
startTime = Time.time;
ChangeEngineColour();
}
public void ChangeEngineColour()
{
float t = (Time.time - startTime) * speed;
engineBodyRenderer.material.color = Color.Lerp(startColor, endColor, t);
}
所以物体的颜色变化不是很慢。我遗漏了什么?
发布于 2019-06-24 19:01:36
在您的解决方案中,该方法只运行一次,因此只会发生一次颜色更改。我通常是这样做的:
void Start()
{
// ... your other stuff
StartCoroutine(ChangeEngineColour());
}
private IEnumerator ChangeEngineColour()
{
float tick = 0f;
while (engineBodyRenderer.material.color != endColor)
{
tick += Time.deltaTime * speed;
engineBodyRenderer.material.color = Color.Lerp(startColor, endColor, tick);
yield return null;
}
}
通过启动一个协程,这个代码将异步地运行在其余代码旁边,使用yield return null
,它将以与Update()
函数相同的速度循环,因此基本上您已经创建了一个孤立的更新()方法,它运行每一帧,并将逐渐改变每一帧的颜色。
发布于 2021-10-27 14:34:30
要逐渐在颜色之间来回切换,请替换Fredrick中的这一行:
engineBodyRenderer.material.color = Color.Lerp(startColor, endColor, tick);
要这样做:
engineBodyRenderer.material.color = Color.Lerp(startColor, endColor, Mathf.PingPong(Time.time, 1));
因此,您将拥有:
https://stackoverflow.com/questions/56735003
复制相似问题