协程不会一直播放
Coroutine does no play all the way through
不幸的是,我的合作例程并没有完全播放。它应该淡化一个对象,所以它的 alpha 为 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;
}
}
这看起来像 "correct" 行为,因为在您达到 alpha 为 0(或 lerp 值为 1)之前,您的 ElapsedTime 将大于 TotalTime,例如
->frame x ElapsedTime 是 0.97 你的 lerp 值是 0.97。
->frame x+1 ElapsedTime 可能已经是1.1,所以你会跳出循环。
只需在循环后添加此代码:
fluidpef.GetComponent<Renderer>().material.color = Color.Lerp(new
Color(1f, 1f, 1f, 1f), new Color(1f, 1f, 1f, 0f), 1);
while
条件是 alpha 值不会减小到 0 的原因。ElapsedTime < TotalTime
意味着在您的循环中 ElapsedTime / TotalTime
永远不会等于 1,这意味着alpha 不会为 0.
为了解决这个问题,我会更改条件以检查 material:
的 alpha 值
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;
}
}
不幸的是,我的合作例程并没有完全播放。它应该淡化一个对象,所以它的 alpha 为 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;
}
}
这看起来像 "correct" 行为,因为在您达到 alpha 为 0(或 lerp 值为 1)之前,您的 ElapsedTime 将大于 TotalTime,例如
->frame x ElapsedTime 是 0.97 你的 lerp 值是 0.97。
->frame x+1 ElapsedTime 可能已经是1.1,所以你会跳出循环。
只需在循环后添加此代码:
fluidpef.GetComponent<Renderer>().material.color = Color.Lerp(new
Color(1f, 1f, 1f, 1f), new Color(1f, 1f, 1f, 0f), 1);
while
条件是 alpha 值不会减小到 0 的原因。ElapsedTime < TotalTime
意味着在您的循环中 ElapsedTime / TotalTime
永远不会等于 1,这意味着alpha 不会为 0.
为了解决这个问题,我会更改条件以检查 material:
的 alpha 值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;
}
}