我发现了类似的问题,但我无法用提供的答案解决我的问题。
我有以下代码,它应该在数组中的颜色之间淡出。
public static IEnumerator FadeMaterialColors(Material m, Color[] colors, float speed, ProgressCurve type){
for (int i = 0; i < colors.Length; i++){
yield return (FadeMaterialColorTo(m, colors[i%2], speed, type));
}
yield return null;
}
public static IEnumerator FadeMaterialColorTo(Material m, Color target, float duration, ProgressCurve type){
Color start = m.color;
float y, t = Time.time;
float progress = (Time.time - t)/duration;
while (progress < 1f){
y = GetProgressCurve(progress, type);
m.color = start + y*(target - start);
yield return null; // return here next frame
progress = (Time.time - t)/duration;
}
m.color = target;
}
函数“FadeMaterialColorTo”本身工作正常,但是当用top函数调用它时我看不到任何结果...我试过在第3行中降低yield得到“return(FadeMaterialColorTo(m,colors [i%] 2],速度,类型));“但后来我得到以下错误:
Cannot implicitly convert type `System.Collections.IEnumerator' to `bool'
Here是一个类似的主题,但在Unity中,返回类型IEnumerator&gt;不起作用
The non-generic type `System.Collections.IEnumerator' cannot be used with the type arguments
答案 0 :(得分:0)
我相信你想要的是:
public static IEnumerator FadeMaterialColors(Material m, Color[] colors, float speed,
ProgressCurve type){
for (int i = 0; i < colors.Length; i++){
yield return StartCoroutine(FadeMaterialColorTo(m, colors[i%2], speed, type));
}
yield return null;
}
如果你在yield return somefunction()
内有另一个嵌套产量,那么像somefunction()
这样的东西只会产生一次,就像你yield return null
循环体内的while
一样
答案 1 :(得分:0)
这是另一种替代方式:
public static IEnumerator FadeMaterialColors(Material m, Color[] colors, float speed, ProgressCurve type){
for (int i = 0; i < colors.Length; i++){
IEnumerator process = FadeMaterialColorTo(m, colors[i%2], speed, type);
while(process.MoveNext())
yield return null;
}
yield return null;
}