#c# #unity3d #coroutine #lerp
#c# #unity3d #сопрограмма #lerp
Вопрос:
К сожалению, моя сопрограмма не воспроизводится полностью. Предполагается, что объект исчезает, поэтому его альфа равна 0. Однако она исчезает до .039.
{
StartCoroutine(colorlerpin7());
yield return null;
}
public IEnumerator colorlerpin7()
{
float ElapsedTime = 0.0f;
float TotalTime = 1f;
while (ElapsedTime < TotalTime)
{
// fades out atipical
ElapsedTime = Time.deltaTime;
fluidpef.GetComponent<Renderer>().material.color = Color.Lerp(new
Color(1f, 1f, 1f, 1f), new Color(1f, 1f, 1f, 0f), (ElapsedTime /
TotalTime));
yield return null;
}
}
Ответ №1:
это выглядит как «правильное» поведение, поскольку ваше прошедшее время будет больше, чем общее время, прежде чем вы достигнете альфа-значения 0 (или значения lerp, равного 1), например
-> прошедшее время кадра x равно 0.97, ваше значение lerp равно 0.97.
-> прошедшее время кадра x 1 может быть уже 1.1, поэтому вы выйдете из цикла.
Просто добавьте этот код после цикла:
fluidpef.GetComponent<Renderer>().material.color = Color.Lerp(new
Color(1f, 1f, 1f, 1f), new Color(1f, 1f, 1f, 0f), 1);
Комментарии:
1. В этом случае вам даже не понадобится функция Lerp, хотя вы могли бы просто принудительно ввести значение
new Color(1f, 1f, 1f, 0f)
2. Да, безусловно.
Ответ №2:
while
Условие заключается в том, почему значение alpha не уменьшается до 0. ElapsedTime < TotalTime
означает, что в вашем цикле ElapsedTime / TotalTime
никогда не будет равно 1, что означает, что значение alpha не будет равно 0.
Чтобы решить это, я бы изменил условие, чтобы проверить альфа-значение материала:
public IEnumerator colorlerpin7()
{
float ElapsedTime = 0.0f;
float TotalTime = 1f;
Renderer matRenderer = fluidpef.GetComponent<Renderer>();
while (matRenderer.material.color.a > 0.0f)
{
ElapsedTime = Time.deltaTime;
matRenderer.material.color = Color.Lerp(new
Color(1f, 1f, 1f, 1f), new Color(1f, 1f, 1f, 0f), (ElapsedTime /
TotalTime);
yield return null;
}
}
Комментарии:
1.
Color.Lerp
сделает зажим для вас.2.
Color.Lerp
фиксирует третий параметр, а не значение цвета, поэтому ваш код получит тот же результат, что и у OP. Я думаю, что его проблема не в зажиме.3. Я обновил свой ответ, извините за беспокойство. Проблема, как уже отмечалось, заключается в
while
том, что фрейм заканчивается слишком рано. В этом ответе я изменяю условие, чтобы проверять альфа-значение вместоElapsedTime