1

我发现了类似的问题,但我无法用提供的答案解决我的问题。

我有以下代码,它应该在数组中的颜色之间淡出。

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”本身工作正常,但在使用顶部函数调用它时我看不到任何结果......我尝试在第 3 行中删除产量以获得“return (FadeMaterialColorTo(m, colors[i%2],速度,类型));” 但后来我收到以下错误:

Cannot implicitly convert type `System.Collections.IEnumerator' to `bool'

是一个类似的主题,但在 Unity 中,返回类型 IEnumerator> 不起作用

The non-generic type `System.Collections.IEnumerator' cannot be used with the type arguments
4

2 回答 2

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

IIRC,如果你在里面有另一个嵌套的 yield ,类似的东西yield return somefunction()只会产生一次somefunction(),就像你在循环yield return null体中做的那样。while

于 2013-09-28T19:12:17.403 回答
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;
}
于 2013-10-04T03:53:06.887 回答