首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Unity脚本:如何使用color.lerp逐渐更改对象的颜色?

Unity脚本:如何使用color.lerp逐渐更改对象的颜色?
EN

Stack Overflow用户
提问于 2019-06-24 18:49:56
回答 2查看 1.4K关注 0票数 1

所以我有一个按钮,可以改变物体的颜色。我正在使用color.lerp,但我需要它逐渐改变。就像慢慢地。我现在所拥有的:

代码语言:javascript
运行
复制
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);
}

所以物体的颜色变化不是很慢。我遗漏了什么?

EN

回答 2

Stack Overflow用户

发布于 2019-06-24 19:01:36

在您的解决方案中,该方法只运行一次,因此只会发生一次颜色更改。我通常是这样做的:

代码语言:javascript
运行
复制
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()函数相同的速度循环,因此基本上您已经创建了一个孤立的更新()方法,它运行每一帧,并将逐渐改变每一帧的颜色。

票数 2
EN

Stack Overflow用户

发布于 2021-10-27 14:34:30

要逐渐在颜色之间来回切换,请替换Fredrick中的这一行:

代码语言:javascript
运行
复制
engineBodyRenderer.material.color = Color.Lerp(startColor, endColor, tick);

要这样做:

代码语言:javascript
运行
复制
engineBodyRenderer.material.color = Color.Lerp(startColor, endColor, Mathf.PingPong(Time.time, 1));

因此,您将拥有:

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56735003

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档