Unity Script: Как постепенно изменить цвет объекта с помощью color.lerp? - PullRequest
1 голос
/ 24 июня 2019

Итак, у меня есть кнопка, которая должна изменить цвет объекта.Я использую 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);
}

, поэтому цвет объекта меняется не медленно.чего мне не хватает?

1 Ответ

2 голосов
/ 24 июня 2019

В вашем решении метод выполняется только ОДИН РАЗ, поэтому может произойти только ОДНО изменение цвета.Вот как я обычно это делаю:

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;
    }
}

При запуске Coroutine этот код будет выполняться асинхронно рядом с остальной частью кода, и с yield return null он будет зацикливаться с той же скоростью, что и ваши Update() функции,по сути, вы создали изолированный метод Update (), который запускает каждый кадр и постепенно меняет цвет каждого кадра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...